从子组件更改父组件中的状态,然后将该状态作为属性传递,并在子组件中更改状态

库努克

我有一个带有两个子组件的父组件。单击按钮的动作应更改状态父组件,这将影响两个子组件。

这是我的父组件:

export default class SearchView extends React.Component {
  // attributes
  state = {
    loading: false
  }

  //
  constructor(props){
    super(props)
  }

  // get list of items
  getItems(){
    this.setState({loading:true})
    axios.get('/path_to_data').then( response => {
      this.setState({items:response.data, loading: false})
    }).catch(err=>{console.log(err)})
  }

  render(){
    return (
      <div>
        <SearchForm
          getItems={this.getItems.bind(this)}
          loading={this.state.loading}
        />
      { this.state.items ?  <ItemCards items={this.state.items} /> : "No data"}
      </div>
    )
  }//render

}//class

这是发生点击事件的地方:

export default class SearchForm extends React.Component {
  // attributes
  state = {
    loading: this.props.loading
  }

  // render
  render(){
    return (
      <Segment inverted color="yellow">
        <Grid columns="2">
          <Grid.Column>
          </Grid.Column>
          <Grid.Column>
            <Button
              loading={this.state.loading}
              disabled={this.state.loading}
              color="black"
              onClick={this.props.getItems}
            >
              Search
            </Button>
          </Grid.Column>
        </Grid>
      </Segment>
    )
  }//render

}//class SearchForm

这是其他子组件:

export default class ItemCards extends React.Component {

  // constructor
  constructor(props){
    super(props)
  }
  // state
  state = {
    items: this.props.items
  }
  ...

问题是,当单击按钮时,我希望loading属性的状态对象中的更改将被更改,并且属性也将被传递到触发事件的同一子组件中。然后,我希望这个子组件能够检测到父级的状态以及loading属性的变化,然后它将更改其自身的状态,UI会在元素上呈现属性,直到响应到来(当响应到来时,加载被删除)。

为什么此代码无法按预期工作?我如何解决它?

乔希

在此示例中,<Button>组件不应具有任何状态,而应仅使用props。

因此,尝试重写为:

<Button
   loading={this.props.loading} 
   disabled={this.props.loading}
   color="black"
   onClick={this.props.getHotels}>

原因是在进行响应时,您不会将状态从一个组件传递到另一个组件。状态是包含在单个组件中的东西。父组件保留状态并通过道具与子组件进行通信是一个很好的模式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从子组件更改父组件的状态?

来自分类Dev

如何从子组件更改父组件的状态?

来自分类Dev

尝试从子组件React Hooks更改父级中的状态

来自分类Dev

根据子组件中父组件状态的更改,在父组件上执行代码

来自分类Dev

当父状态在React中更改时停止渲染子组件

来自分类Dev

从React中的子组件更改父状态(无Redux)

来自分类Dev

更改 reactJs 父组件中的状态不会更改 react 子组件中的道具

来自分类Dev

子组件更新时更改父状态

来自分类Dev

更改“叔叔”组件中的状态?

来自分类Dev

单击带有React JS中特定键的子组件时更改父组件的状态

来自分类Dev

如何从功能组件的父级更改子状态组件

来自分类Dev

从子组件更改父状态不起作用

来自分类Dev

ReactJS:更改子组件的状态

来自分类Dev

如何将数据从子组件(子组件有自己的状态)传递给父组件?

来自分类Dev

处理子组件中的父状态

来自分类Dev

状态更改后从子组件重新渲染

来自分类Dev

如何将状态从子组件传递到父组件?

来自分类Dev

在React中重新渲染子组件或更改子状态

来自分类Dev

组件中的订阅未获取状态更改

来自分类Dev

更改React组件的状态

来自分类Dev

如果父状态值更改,如何更新子组件

来自分类Dev

React:子组件未在父状态更改时呈现

来自分类Dev

响应子组件在父状态更改后不更新

来自分类Dev

父状态更改时子组件不会更新

来自分类Dev

子组件未因父状态更改而更新

来自分类Dev

父状态更改后,组件不会更新

来自分类Dev

React:单击组件以更改父状态

来自分类Dev

将状态传递给子组件作为属性

来自分类Dev

当RN 0.61中的状态更改时,如何从主组件中重新渲染子组件?

Related 相关文章

热门标签

归档