当前位置:   article > 正文

初学react(3)——请求数据_react public json

react public json

在日常开发中,是离不开前后端交互的,普遍场景下,react应用和后端的交互使用ajax请求,在react中如何去发起一个ajax请求呢?在没有后端接口的情况下,我们可以在项目中加入JSON文件,直接访问开发环境开启的服务,这样又不会涉及到跨域问题。所以,第一步先在项目的public目录创建JSON文件:

我这里创建了一个static目录,这个目录是随意创建的,到时请求时写入对应的目录即可。我的users.JSON写入的内容是:

  1. [{
  2. "name": "小明",
  3. "age": 16
  4. }, {
  5. "name": "小红",
  6. "age": 15
  7. }, {
  8. "name": "小花",
  9. "age": 17
  10. }]

在MyComponent组件中,发起一个请求,代码如下:

  1. import React, { Component } from 'react'
  2. import './index.css'
  3. class MyComponent extends Component {
  4. constructor(props) {
  5. super(props)
  6. this.state = { count: 1, users: [] }
  7. }
  8. componentWillMount() {
  9. fetch('/static/users.json').then(res => {
  10. return res.json()
  11. }).then(data => {
  12. this.setState({users: data})
  13. })
  14. }
  15. add() {
  16. this.setState(preState => ({count: preState.count + 1}))
  17. }
  18. render() {
  19. return (<ul className="my-component">
  20. {this.state.users.map((user, index) => {
  21. return (<li key={index}>
  22. 姓名:{user.name}
  23. &nbsp;&nbsp;
  24. 年龄:{user.age}
  25. </li>)
  26. })}
  27. </ul>)
  28. }
  29. }
  30. export default MyComponent

再修改index.css的width属性为300px,就得到以下的效果:

以上的情况是把JSON文件写到了react项目里,然后发送请求获取数据,若是需要在开发环境对接其它服务时,又如何实现?

我利用nodejs搭建一个服务,文件内容如下:

users.json的文件与上面react项目里面的一样,然后,把创建服务的代码写到app.js里,代码如下:

  1. const http = require('http')
  2. const users = require('./static/users')
  3. http.createServer((req, res) => {
  4. if(req.url === '/api/users') {
  5. res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'})
  6. res.end(JSON.stringify(users))
  7. }
  8. res.end()
  9. }).listen(8000)

代码解释:引入了http模块,创建一个监听8000端口的服务,对url为“/api/users”的访问,返回users.json里面的内容。

首先,我们开启上面的服务:在目录下输入命令行:node app。接下来,我们在react项目中取上面的数据,这里访问的接口服务端口号与项目所在的服务端口号不一样,涉及到跨域问题,要在开发环境中,想要正常访问到8000端口的服务,我们需要代理。代理的做法是:在项目的package.json文件添加“proxy”属性,并重新运行npm start,我的设置是:

接着在原来的请求改写一下url:

到这里,应用就正确通过请求取到数据并渲染到页面上。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/65924
推荐阅读
相关标签
  

闽ICP备14008679号