学习react的时候,想要获取本地的json数据
目录结构
想要的是获取到name.json
想要的是获取到name.json

componentWillMount(){
      fetch('./components/datas/name.json')   
      .then((res) => {return res.json(); })  
      .then((data) => {alert(JSON.stringify(data));this.setState({selV:JSON.stringify(data)});})  
}

这段获取数据的代码是写在App.jsx组件中的,按照路径来说,看起来是没错的,但是运行起来之后就一直报错,404
在这里插入图片描述
后来百度之后一些论坛和博客上说,路径应该是以index.html文件所在的相对路径(我看自己的目录结构App.jsx和我的index.html就是平级的,那按照此说法我这样是可以获取的?)

后面想了一会,其实是很多的论坛说的不够清楚,这里的index应该是虚拟的index文件,不是指的我上面放出来的目录结构上 src–index.html。

因为我们在使用webpack对项目进行打包的时候,使用了html-webpack-plugin,当不指定contentBase的话dev-server的默认根目录是在webpack.config同一级的目录下,也就是说:这里生成的虚拟index.html是在根目录里面的,也就是和webpack.config.js这些配置文件是平级噢!

如果你手动指定了contentBase的话,再自己多检查一下路径吧!

接下来我在自己的项目中修改了一下路径就对了!
可以先这样试一下,看是不是可以(不论是否指定了contentBase,或者自己也很模糊虚拟index.html的位置,就按照下面的方法先试着获取文件内容吧,免得在项目里搞晕了 -.-||| )
在这里插入图片描述
fetch路径修改如下:亲测可以!

componentWillMount(){
      fetch('./src/components/datas/name.json')   
      .then((res) => {return res.json(); })  
      .then((data) => {alert(JSON.stringify(data));this.setState({selV:JSON.stringify(data)});})  
}

使用axios同样可以获取本地数据

_getFile = url => new Promise((resolve, reject) => {
    axios({
      method: 'get',
      url,
      responseType: 'blob',
      crossOrigin: true,
      withCredentials: true
      // responseType: 'arraybuffer',
    }).then((data) => {
      // debugger
      resolve(data.data);
    }).catch((error) => {
      reject(error);
    });
  })

url写文件路径即可以返回文件的blob
注:可以通过blob生成File对象~
var file = new File([blob],fileName);

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐