当前位置: 首页 > 知识库问答 >
问题:

如何让父组件管理React中子组件的状态?

海信鸥
2023-03-14

我用React构建了3个组件。他们是:

  • 包装器
  • 列表
  • 列表项

如何管理单击的复选框的状态。我想Wrapper知道哪些复选框被选中。

class ListItem extends React.Component {
  render(){
    return (
      <li>
        <input type="checkbox" onChange={e => handleSelect(e.target.checked)} />
        <label>Checkbox 1</label>
      </li>
    )
  }
}

class List extends React.Component {
  getList(){
    const itemsList = this.props.list.map(
      (item, index) => (
        <ListItem key={index} item={item} />
      )
    )
   return itemsList;
  }
  
  render(){
    <ul>
      {this.itemsList}
    </ul>
  }
}

class Wrapper extends React.Component {
  const list = [
    {"id": 1, "label": "label 1"},
    {"id": 2, "label": "label 2"},
  ]

  render(){
    <List list={list} />
  }
}

共有1个答案

浦墨竹
2023-03-14

您应该在包装组件中维护列表(以及复选框)的状态,并将其传递给列表组件。

另外,在包装器组件中创建处理程序,并将其向下传递。

所以你的代码变成这样:

class Wrapper extends React.Component {
    constructor() {
        this.state = [
            {"id": 1, "label": "label 1", checked: false},
            {"id": 2, "label": "label 2", checked: false}
        ]
    }

    handleChange(id, checked) {
        this.setState((state) => {
            return state.map(item => {
                return {
                   ...item,
                   checked: item.id === id ? checked : item.checked
                }
            });
       });
    }

    render() {
        <List list={this.state} onChange={this.handleChange} />
    }
}


class List extends React.Component {
  render(){
    <ul>
    { this.props.list.map((item, index) => (
          <ListItem key={index} item={item} handleChange={this.props.handleChange} />
    )}
    </ul>
  }
}

class ListItem extends React.Component {
  render(){
    const { item } = this.props;
    return (
      <li>
        <input type="checkbox" onChange={(e) => this.props.handleChange(item.id, e.target.checked)} />
        <label>{ item.label } </label>
      </li>
    )
  }
}

我没有测试这段代码,但我希望你能明白它的要点。在顶部组件中维护和更改状态,并使用较低的组件来显示和交互。

 类似资料:
  • 我在react native中有一个搜索栏组件,它在父组件中导入, SearchBar子组件具有以下元素: 是否可以访问此子组件在其中导入的父组件中的状态?提前感谢你的帮助

  • 问题内容: 我有两个组件: 父组件 ,我想从中更改子组件的状态: 和 子组件 : 我需要从父组件更改子组件的 打开 状态,还是单击父组件中的按钮时从父组件调用子组件的 toggleMenu() ? 问题答案: 状态应在父组件中进行管理。您可以通过添加属性将值传输到子组件。

  • 我需要使用父组件中子组件内部的状态值。 组成部分: 这是父组件:

  • 我正在将父组件的状态从父组件传递到子组件。在子组件中,我有一个不同的状态。我正在对子组件的状态执行一些操作,并且结果必须添加到父组件的状态。因此,在我的父组件中,我编写了一个回调函数,该函数将更新父组件的状态。代码为: 因此,这个函数随后作为道具传递给子组件: 然后在我的子组件中,我试图实现回调函数为: 但这并没有达到预期效果。这是正确的方法吗?有人能帮我吗? 我试图通过实现这里提供的解决方案来解

  • 我创建了一个包含登录组件和注册组件的签名页面组件。我的问题是,我如何传递一个onhtml函数从父到子,以便更改我的父组件(签名页组件)的状态?我期望的是,通过单击子组件中的按钮,可以切换父组件的活动状态,并根据活动状态更改样式。我试图通过一个处理功能从父到子,但它不能很好地工作。 有什么解决办法吗? codesandbox中的详细信息:https://codesandbox.io/s/wizard