如何将 ajax 数据传递给 React 组件?

Posted

技术标签:

【中文标题】如何将 ajax 数据传递给 React 组件?【英文标题】:How to pass ajax data to React component? 【发布时间】:2016-10-28 15:20:05 【问题描述】:

我是反应 js 的新手。我只是通过 ajax 获取数据并操作组件中的数据。但我总是不确定。我知道我的 ajax 调用正在工作,但我不知道如何处理组件中的数据。

App.js

    var React = require('react');
var Actions = require('../actions');
var Store = require('../stores/store');
var Nav =require('./Nav');
var Fakeprofile = require('./Fakeprofile');
var Sidemenu = require('./Sidemenu');
var Bulkmail = require('./Bulkmail');
var store = require('../stores/store');
var api = require('../utils');
function getAppState() 

    return 
        //result:store.setProfile()
        result:api.getprofile()
    



var App = React.createClass(
   getInitialState:function () 
       return getAppState();
   ,
    componentDidMount: function()
        Store.addChangeListener(this._onChange);
    ,

    componentUnmount: function()
        Store.removeChangeListener(this._onChange);
    ,



    render:function () 
        console.log(this.state);
        return(
            <div>
                <Nav/>
                <Sidemenu/>
                <Fakeprofile />



            </div>

        )
    ,
    _onChange: function()
        this.setState(getAppState());
    
);

module.exports = App;

utils.js

var actions = require('./actions');

module.exports = 
  getprofile:function () 
      console.log('Gettinf data');
      var url  = 'http://localhost:3000/api/index';
      $.ajax(
          url:url,
          dataType:'json',
          cache:false,
          success:function success(data) 
              console.log(data);



          ,
          error:function error(xhr,status,err) 
              console.log(err);
          
      )
  
;

【问题讨论】:

【参考方案1】:

在 componentdidmount 中启动 Ajax 调用,并在解决 promise 后设置您的组件状态 // App.js

   var React = require('react');
var Actions = require('../actions');
var Store = require('../stores/store');
var Nav =require('./Nav');
var Fakeprofile = require('./Fakeprofile');
var Sidemenu = require('./Sidemenu');
var Bulkmail = require('./Bulkmail');
var store = require('../stores/store');
var api = require('../utils');
function getAppState() 

    return 


    



var App = React.createClass(
   getInitialState:function () 
       return getAppState();
   ,
    componentDidMount: function()
        api.getprofile().then(function(response) 
             this.setState(
                  data: response
             )
        );
        Store.addChangeListener(this._onChange);
    ,

    componentUnmount: function()
        Store.removeChangeListener(this._onChange);
    ,



    render:function () 
        console.log(this.state);
        return(
            <div>
                <Nav/>
                <Sidemenu/>
                <Fakeprofile />



            </div>

        )
    ,
    _onChange: function()
        this.setState(getAppState());
    
);

module.exports = App;

var actions = require('./actions');

module.exports = 
  getprofile:function () 
      console.log('Gettinf data');
      var url  = 'http://localhost:3000/api/index';
      return $.ajax(
          url:url,
          dataType:'json',
          cache:false,
          success:function success(data) 
              console.log(data);



          ,
          error:function error(xhr,status,err) 
              console.log(err);
          
      )
  
;

【讨论】:

idea 是在您从 utils.js 获取的 componentDidmount 中设置数据 对不起先生,但我是 React Js 的新手。我还在学习这些东西。请完整代码 我没有您尝试设置的确切业务逻辑。请详细说明 我试过的东西但是它抛出了一个错误Uncaught TypeError: Cannot read property 'then' of undefined 我建议您使用 axios 或 fetch 来进行 api 调用,并在您履行承诺后调用设置状态。

以上是关于如何将 ajax 数据传递给 React 组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何推迟将 Ajax 数据传递给子组件?

React:将传入的服务数据传递给孩子

使用 useState React Native 将获取数据传递给组件

将状态共享给其他组件 |将数据传递给其他组件

ReactJS - 如何将“全局”数据传递给深度嵌套的子组件?

如何将 props 数据传递给 compose()