Доступ к значению дочернего состояния в родительском компоненте в React

#javascript #reactjs #components #parent-child

#javascript #reactjs #Компоненты #родитель-потомок

Вопрос:

У меня есть (например) два компонента в React. Первый из них App.js является родительским компонентом. Он передает некоторые значения дочернему компоненту Child.js . В child.js, он получает значения через props и обновляет некоторые state переменные, используя axios результаты вызова. это работает нормально.

Теперь мне нужно получить это значение результата обновления в App.js . как получить это значение в App.js ?

App.js

 this.state ({ ... 
    examResult: null // need to update this with the child component result.
 })

<ChildComponent 
    Id={this.state.StudentId} 
    Name={this.state.StudentName}
/>
  

Child.js

 state {
   examResult: null
}
...
componentDidMount()
{
    const {Id, Name} = this.props;
    axios.get( .... //To get the Result
    this.setState(
    { examResult: examResult} //Update the result to state variable. It wors fine. I need to pass this value to App.js
    )
}
  

Ответ №1:

Вы можете сделать это следующим образом:

Родительский:

 updateResults(results) {
   this.setState({examResult:results});
}
render() {
   return (<ChildComponent 
    Id={this.state.StudentId} 
    Name={this.state.StudentName}
    updateResults={this.updateResults.bind(this)}
/>)
}
  

Дочерний:

 componentDidMount()
{
    const {Id, Name, updateResults} = this.props;
    axios.get( ....).then(results => //To get the Result
      updateResults(results.data)
    )
}
  

Ответ №2:

Вы можете передать другую функцию в качестве реквизита. И из дочернего компонента вы можете вызвать эту функцию и передать любые параметры, которые вам нужны в вашем родительском компоненте.

Пример:

 <ChildComponent 
    Id={this.state.StudentId} 
    callback={this.callbackfn}
    Name={this.state.StudentName} />
  

Где this.callbackfn будет функцией в вашем родительском компоненте.

Из дочернего компонента вы можете вызвать его как

this.props.обратный вызов

Комментарии:

1. Извините.. Я тебя не понимаю. Что <Parent> здесь и откуда я должен сделать, чтобы вызвать это?

2. Итак, в дочернем компоненте я могу вызвать this.props.callback . Если я установлю состояние внутри этой функции, то смогу получить доступ к той же переменной в App.js ? Если я ошибаюсь, не могли бы вы привести какой-либо пример

3. Вы можете передать эту переменную в качестве аргумента этой функции обратного вызова.