2016年6月6日 星期一

React Native: CameraRoll.getPhotos(tag, success, error) is deprecated. Use the returned Promise instead

在實作 <React Native 學習手冊> 第六章時,有個 cameraRoll 的功能,cameraRoll 很白話了吧?! 就跟相片有關係的 component,其中用 getPhotos 可以取得相簿的照片。

但... 實作時發生 CameraRoll.getPhotos(tag, success, error) is deprecated.
  Use the returned Promise instead
。別擔心這也不是個錯誤,react native 還是會正常顯示。大概是因為我的 react native 版本較新,我的是 ^0.26.1,範例的 ^0.11.4。這... 邊看書邊學 debug, diff 新舊差異,也是蠻不錯的。

這是舊的實作方式 (我自己有轉為較新的 ES6 寫法...)
就的 getPhotos 會接受三個參數。
componentDidMount() {
    CameraRoll.getPhotos(
      {first: 5}, // 參數物件  first 要求反序的照片數量 (最新的先拿到)
      (data) => { // 成功 callback
        this.setState({
          // 從相機相簿顯示照片 這裡的 edges[3] 表示會拿到最近拍照的第三張
          photoSource: {uri: data.edges[3].node.image.uri}
        })
      },
      (error) => { // 失敗的 callback
        console.warn(error)
      }
    )
  }

新的 getPhotos 只接受一個參數,並回傳 promise,請參考官方文件。新的要改為 (僅為示範...) :

const fetchParams = {
      first: 5,
};

CameraRoll.getPhotos(fetchParams)
      .then((data) => {
          // console.log(data);
          this.setState({
              photoSource: {uri: data.edges[3].node.image.uri }
          });
      })
      .catch((error) => console.log('getPhotos error: ' + error.message))
      .done(() => {
        alert('CameraRoll getPhotos done!');
      });

有個第三方套件跟 cameraRoll 有關的: https://github.com/bamlab/rn-camera-roll

1 則留言:

若你看的文章,時間太久遠的問題就別問了,因為我應該也忘了... XD

Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...