【发布时间】:2017-11-03 00:44:43
【问题描述】:
我对 React js 有点陌生。我有两个问题。我来了
问题 1
我想在更新(重新渲染)父组件时更新(重新渲染)子组件。经过一番谷歌搜索,我发现当道具发生变化并且我们调用 forceUpdate 函数时,只更新父组件而不是子组件。如果我想更新子组件,我需要使用 setState 函数并在状态中设置一些东西来更新子组件。 但我面临的问题是,当我在父组件中设置状态时,子组件没有更新。没有调用孩子的渲染方法。有人可以告诉我我做错了什么吗?
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)
儿童.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 调用,当它返回时它会更新道具并设置状态,以便该子组件也被重新渲染,但子组件组件没有重新渲染。有人可以告诉我出了什么问题。
问题 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 调用返回的数据在应用程序组件中设置一些道具,然后我还希望组件二在应用程序中更改某些道具后立即重新渲染有没有办法做到这一点
感谢任何帮助,我们将不胜感激
【问题讨论】:
标签: javascript jquery reactjs react-router axios