根据子组件更新App状态

时间:2018-06-14 12:04:34

标签: reactjs async-await parent-child react-props

在更新Child组件的状态时,我需要更新父组件的状态( App.js ),GET请求componentDidMount()请求setPoints 1}}。

我尝试将函数Child作为道具传递,但不幸的是,这不起作用。

这是我试过的:

class Child extends Component { state = { points: null } async componentDidMount() { try { const res = await axios.get(url); const data = res.data; this.setState({ points: data.points, }) this.props.setPoints(); } catch (err) { console.log('child', err); } } render() { return ( <div> </div> ); } } 组件:

App

父组件(class App extends Component { state = { points: '', } setPoints() { this.setState({ ...this.state, points: this.state.points }); } shouldComponentUpdate(nextState) { if (this.state.points !== nextState.points) { return true; } return false; } render() { return ( <div className="App"> <Route exact path="/child" render={() => <Child setPoints={this.setPoints} />} /> </div> ); } } ):

    async componentDidMount() {
    try {
        const res = await axios.get(url);
        const data = res.data;
        console.log(data.points);
        this.props.setPoints(data.points);
    } catch (err) {
        console.log('child', err);
    }

任何人都可以帮我这个吗?帮助将受到高度赞赏。

修改

我尝试了Joe Clay所写的内容,这很有道理,但我仍然遇到了错误。这是我更新的代码:

scipy

它记录了点的值,但由于某种原因,我得到:“无法读取未定义的属性'点'”。

2 个答案:

答案 0 :(得分:1)

关于孩子:

this.props.setPoints(data.points)

父母:

setPoints(points) {
    this.setState({
        ...this.state,
        points
    });
}

答案 1 :(得分:1)

考虑Parent Component中的数据值。我将通过将prop传递给在父级中执行setState的函数来更改数据的值,从而将值更改为所需的值。

为父级

        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet worksheet = workbook.createSheet();
        HSSFSheet worksheet1 = workbook.createSheet("List of logins");

将handleChange函数作为prop组件传递给子组件。

子组件

class Parent extends React.Component{    
    constructor(props){
         super(props);
         this.state({
             name:''
         })
    }    

     handleChange(value){
         this.setState({name:value});
     }
     render(){
         return (<Child handleChange={this.handleChange} />)
     }
}

这会在父组件中将name的值设置为hello。