【问题标题】:Return checked value from Child to Parent and to Grandparent component using React [duplicate]使用 React 将检查值从子组件返回到父组件和祖父组件 [重复]
【发布时间】:2018-04-28 13:10:50
【问题描述】:

我正在制作一份学生姓名及其 ID 的列表。每当要呈现列表元素时,Parent 类都会调用 Child 类。

export default class Parent extends Component {    
  render() {
    return (
      <div>
        <div>
          <ul>{this.props.studentData.map(item => {
            return(
            <div><Child key={item.id} {...item} /></div>);
          })}
          </ul>
          <button>Submit</button>
        </div>
      </div>
    );
  }
}

export default class Child extends Component {
  render() {
    let {name}=this.props;
    return (
      <li><input type="checkbox"/>{name}</li>
    );
  }
}

我试图在列表下放置一个提交按钮,该按钮返回检查学生姓名的结果,一个或多个。我不明白的是如何将学生姓名的值从子组件返回到父组件,并一直返回到层次结构的顶部并存储在某种变量中。有没有办法将值返回给父组件,即调用的组件?

【问题讨论】:

  • 从父级传递一个函数作为 Child 的 prop 并在 Child 内部在检查输入时调用此 prop。在父级中,您将保持选中子级的状态,然后在提交时发送。

标签: javascript forms reactjs


【解决方案1】:

您可以向Child 发送一个回调函数,它会在它被选中或取消选中时发出通知。

const Child = ({ id, name, onChange }) => 
  <li>
    <input
      type="checkbox"
      onChange={(event) => onChange(id, event.target.checked) }
    />
    {name}
  </li>

class Parent extends React.Component {
  constructor() {
    super()

    this.handleChange = this.handleChange.bind(this)
  }

  handleChange(id, checked) {
    console.log(`student ${id} is ${checked ? 'checked' : 'unchecked'}`)
  }

  render() {
    return (
      <div>
        <ul>
          {this.props.studentData.map(item =>
            <Child key={item.id} {...item} onChange={this.handleChange} />
          )}
        </ul>
      </div>
    )
  }
}

const studentData = [
  { id: 1, name: 'Student 1' },
  { id: 2, name: 'Student 2' },
  { id: 3, name: 'Student 3' },
]


ReactDOM.render(
  <Parent studentData={studentData} />,
  document.getElementById('root')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

【讨论】:

  • Grandparent 组件是否也可以从Parent 组件中检索数据?无论复选框和按钮是否存在,是否可以从层次结构的底部获取数据到顶部?
  • @user8907896 绝对。只要你继续传播回调。
猜你喜欢
  • 2017-04-28
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 2020-11-13
  • 2020-09-28
相关资源
最近更新 更多