首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当父组件更改时更新子组件

当父组件更改时更新子组件
EN

Stack Overflow用户
提问于 2017-06-01 18:38:43
回答 1查看 832关注 0票数 1

我对js的反应有点新。我有两个问题。我来了

问题1

当我更新(重新呈现)父组件时,我想更新(重呈现)子组件。在googling之后,我发现当道具被更改并且我们调用forceUpdate函数时,只更新父组件,而不是子组件。如果我想更新子组件,我需要使用setState函数并设置一些状态来更新子组件。,但我面临的问题是,当我在父组件中设置状态时,子组件不会被更新。不调用子程序的呈现方法。有人能告诉我我做错了什么吗?

Parent.jsx

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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'),
  ]
};

现在,假设我要使用组件2路由,它将呈现组件2,并在应用程序组件中生成一个ajax调用,并根据ajax调用返回的数据,在应用程序组件中设置一些道具,并且我还希望组件2在应用程序中更改一些道具后重新呈现。

谢谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-06-01 18:56:35

代码语言:javascript
复制
this.props.user = res.data.user; 

你不能分配给道具。道具是由父母传递的。将用户设置为状态,并将状态传递给您的子组件,如下所示:

代码语言:javascript
复制
<ABCD {...this.props} user={this.state.user} />

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44314799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档