美文网首页React交流
React Native使用本地json模仿数据请求

React Native使用本地json模仿数据请求

作者: 大柚子08 | 来源:发表于2017-06-01 19:48 被阅读1970次

    由于后台接口并不随着我们的需求而随时恭候,我们经常需要自己模拟数据,就拿ListView来说,dataSource的数据如果后台没有提供,我一般就选择直接在这个文件中声明一个数组变量,定义几条数据就可以这种方式确实很简单,但是写法跟真正的网络请求又不一样,当真正的请求来的时候,我们需要改动的地方比较多,如下:

    const data = [
      {"name" : "Melody", age: 21},
      {"name" : "ZZ", age: 22},
    ];
    
    
    let ds = new ListView.DataSource({ 
          rowHasChanged: (r1,r2) => r1 !== r2,
          sectionHeaderHasChanged: (s1, s2) => s1 !== s2
         });
        this.state = {
          dataSource: ds.cloneWithRows(data)
        };
    

    因为不需要请求数据,所以直接dataSource: ds.cloneWithRows(data),但是实际情况是怎样呢?
    假如是在进入这个页面就有需要请求的数据:

     componentDidMount() {
        this.fetchData()
      }
    
    fetchData() {
      fetch('https://facebook.github.io/react-native/movies.json')
          .then((response) => response.json())
          .then((responseJson) => {
            this.setState({
              dataSource: this.state.dataSource.cloneWithRows(responseJson.data)
            })
          })
          .catch((error) => {
            console.error(error);
          });
    }
    

    所以在真正的网络请求来的时候,最好的方式是我们在本地使用跟网络请求回来类似的JSON文件,注意,这里不是读取JSON文件,不是用import xxx from './test.json'这种方式将JSON文件当成一个普通文件读入,而是要当做一个接口访问。
    其实实现方式很简单,我之前不知道React Native 是自己开启了一个本地服务器的,所以导致我一直解决不了这个问题,运行React Native它会开启一个本地服务器:http://localhost:8081

    2017-06-01_194033.jpg
    这个服务器是开启在项目根路径下的,也就是说,如果你想要 http://localhost:8081/test.json这样访问你的json文件,那么将该文件放在根路径下就可以访问了
    2017-06-01_194259.jpg
    或者你也可以在根路径下新建一个文件夹专门存放json文件,访问路径加上文件夹名字即可。
    此时你的代码看起来像这样:
    fetchData() {
      fetch('http://localhost:8081/test.json')
          .then((response) => response.json())
          .then((responseJson) => {
            this.setState({
              dataSource: this.state.dataSource.cloneWithRows(responseJson.data)
            })
          })
          .catch((error) => {
            console.error(error);
          });
    }
    

    等到后台人员抛出真正的接口,只需要修改请求的url就可以了。

    相关文章

      网友评论

      • LambertShe:您好,在模拟本地json数据时,本地的中文数据在chrome中和模拟器中打开全是乱码的,怎么解决?
        大柚子08:这是由你的json文件编码格式与chrome不一致造成的,你用的是什么编辑器呢?你可以百度搜怎么修改这个编辑器的文件编码,一般情况下是设置为utf-8,你试试。

      本文标题:React Native使用本地json模仿数据请求

      本文链接:https://www.haomeiwen.com/subject/xagefxtx.html