在 React 的子组件中将状态作为道具传递

Posted

技术标签:

【中文标题】在 React 的子组件中将状态作为道具传递【英文标题】:pass state as props in component child in React 【发布时间】:2019-02-20 04:42:39 【问题描述】:

我从本地服务器获取数据,使用 axios.get 捕获它们,并将它们保存在我的状态中。没关系,但是当我想将它作为组件子项中的道具传递时,KABOOM!不工作。 我正在寻找解决方案,我认为这是 lyfecycle 问题,但我不确定。

App.js

import React,  Component  from 'react';
import './style/App.css';
import axios from 'axios'
import Table from './Components/Table'


class App extends Component 

    state = 
      tabData: [],
    

    componentWillMount = () => 
      this.getDataFromServer()
    

    getDataFromServer = () => 
      axios.get("http://localhost:8000")
      .then((response) => 
        const twentyObj = response.data.splice(-20);
        this.setState(
          tabData:twentyObj
        )
        console.log(this.state.tabData)
      )
        .catch(function (error) 
          console.log(error);
        )
    


  render() 

    return (
      <div className="App">

        <Table stateData=this.state.tabData/>

      </div>
    );
  


export default App;

开发者工具浏览器说: 类型错误:_this.props 未定义 (对于 Table.js 中的 this.props.tabData.map)

Table.js

import React from 'react';
import Cell from './Cell'


const Table = (props) => 


    return(

        <div>
        this.props.tabData.map( item => 
          <Cell key=item.index
                time=item.timestamp
                nasdaq=item.stocks.NASDAQ
                cac40=item.stocks.CAC40/>
        )
      </div>
    )


export default Table;

【问题讨论】:

【参考方案1】:

Table 是功能组件this 在那里没有任何价值,这就是错误消息告诉你的内容。

您应该使用props.tabData 而不是this.props.tabData

更新:

在这里你将它作为 stateData 而不是 tabData 尝试 props.stateData

【讨论】:

以上是关于在 React 的子组件中将状态作为道具传递的主要内容,如果未能解决你的问题,请参考以下文章

React.js + Flux -- 在视图中将回调作为道具传递

React Context API,从子组件设置上下文状态,而不是将函数作为道具传递

如何使用从 React 中的子组件获取的数据更新父组件中的状态

[作为传递函数,但未在React的子组件中执行

Array.map 中的 React 功能组件在将函数作为道具传递时总是重新渲染

在无状态子组件中传递/访问道具