gpt4 book ai didi

javascript - 当父组件发生变化时更新子组件

转载 作者:行者123 更新时间:2023-12-03 04:11:33 24 4
gpt4 key购买 nike

我对 React js 有点陌生。我有两个问题。我来了

问题1

我想在更新(重新渲染)父组件时更新(重新渲染)子组件。经过一番谷歌搜索后,我发现当 props 更改并且我们调用 forceUpdate 函数时,只有父组件会更新,而子组件不会更新。如果我想更新子组件,我需要使用 setState 函数并在状态中设置一些内容来更新子组件。 但我面临的问题是,当我在父组件中设置状态时,子组件不会更新。子级的 render 方法没有被调用。有人可以告诉我我做错了什么吗?

Parent.jsx

class Application extends React.Component {
isBindEvents=false;



componentWillMount(){
let {dispatch} = this.props;

dispatch(getCompanyInfo( "abcd.com", (res) => { // THIS IS A ACTION CALL


this.props.user = res.data.user;
this.setState({name:res.data.user.name})

this.forceUpdate()

}))
}

render(){


return ( <div className='react-wrapper'>
<ABCD {...this.props} /> // THIS IS THE CHILD COMPONENT WHICH I WANT TO RE-RENDER WHEN THE PARENT COMPONENT CHANGES
<div >

<div id="body" >
<div>
<div >
<div className="container-fluid">
{this.props.posts}
</div>
</div>
</div>
</div>
</div>

</div>)
}
}

export default connect(mapStateToProps)(Application)

CHILD.JSX

class ABCD extends React.Component {



render() {



let isShowUser = this.props.user
? true
: false;



return (
<div> Here is the user name {isShowUser? this.props.user.name: 'user not present'} </div>
);
}
}


export default connect(mapStateToProps)(ABCD);

现在我正在做的是,当应用程序组件安装时,我生成一个对后端服务器的ajax调用,当它返回时,它会更新 Prop ,我设置状态,以便该子组件也被重新渲染,但子组件组件不会重新渲染。有人可以告诉我出了什么问题吗?

问题2

The next question is related to react router I'm using react router for the routeing.This is how I'm using router 

module.exports = {
path: '/',
component: Application,

indexRoute: require('./abcd'),
childRoutes: [
require('./componentTwo'),
require('./componentOne'),
]
};

现在假设我要进入组件二路由,该路由将渲染组件二,并且我在应用程序组件中生成 ajax 调用,并根据 ajax 调用返回的数据在应用程序组件中设置一些 Prop ,然后我还希望组件二在应用程序中的某些 Prop 发生更改后立即重新渲染,有什么办法可以做到这一点

谢谢任何帮助,我们将不胜感激

最佳答案

this.props.user = res.data.user; 

您无法分配给 Prop 。 Prop 是从 parent 那里传递的。将用户设置为状态并将状态传递给您的子组件,如下所示:

<ABCD {...this.props} user={this.state.user} />

在您的子组件中,您现在可以访问 this.props.user。那时也不需要 this.forceUpdate() 。

关于javascript - 当父组件发生变化时更新子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44314799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com