Я пытаюсь отправить данные от дочернего компонента к его родителю следующим образом:
const ParentComponent = React.createClass({
getInitialState() {
return {
language: '',
};
},
handleLanguageCode: function(langValue) {
this.setState({language: langValue});
},
render() {
return (
<div className="col-sm-9" >
<SelectLanguage onSelectLanguage={this.handleLanguage}/>
</div>
);
});
а вот дочерний компонент:
export const SelectLanguage = React.createClass({
getInitialState: function(){
return{
selectedCode: '',
selectedLanguage: '',
};
},
handleLangChange: function (e) {
var lang = this.state.selectedLanguage;
var code = this.state.selectedCode;
this.props.onSelectLanguage({selectedLanguage: lang});
this.props.onSelectLanguage({selectedCode: code});
},
render() {
var json = require("json!../languages.json");
var jsonArray = json.languages;
return (
<div >
<DropdownList ref='dropdown'
data={jsonArray}
value={this.state.selectedLanguage}
caseSensitive={false}
minLength={3}
filter='contains'
onChange={this.handleLangChange} />
</div>
);
}
});
Что мне нужно, это получить выбранное значение пользователем в родительском компоненте. Я получаю эту ошибку:
Uncaught TypeError: this.props.onSelectLanguage is not a function
Может кто-нибудь помочь мне найти проблему?
PS Дочерний компонент создает раскрывающийся список из файла json, и мне нужен раскрывающийся список, чтобы показать оба элемента массива json рядом друг с другом (например, «aaa, english» в качестве первого выбора!)
{
"languages":[
[
"aaa",
"english"
],
[
"aab",
"swedish"
],
}
<SelectLanguage onSelectLanguage={this.handleLanguage*Code*}/>
опечатка.handleLanguageCode: function(langValue) { this.setState({ language: langValue }).bind(this); },
Но он возвращает ошибку:ncaught TypeError: Cannot read property 'bind' of undefined
createClass
связывает не реагирующие методы.Ответы:
Это должно работать. Отправляя реквизит обратно, вы отправляете его как объект, а скорее отправляете его как значение или, в качестве альтернативы, используете его как объект в родительском компоненте. Во-вторых, вам нужно отформатировать ваш объект json, чтобы он содержал пары «имя-значение», а также использование
valueField
иtextField
атрибутDropdownList
Короткий ответ
родитель:
Ребенок:
Детальнее:
РЕДАКТИРОВАТЬ:
Учитывая, что React.createClass устарел с версии v16.0 и выше, лучше пойти дальше и создать компонент React путем расширения
React.Component
. Передача данных от дочернего к родительскому компоненту с этим синтаксисом будет выглядеть такродитель
ребенок
Используя
createClass
синтаксис, который ОП использовал в своем ответе Parentребенок
JSON:
источник
this.state.selectedLanguage
, Кажется, всегда нуль: / Я использую DropDownList изreact-widgets
Uncaught ReferenceError: value is not defined
. Я внес это изменение:onChange={this.handleLangChange.bind(this, this.value)}
ошибка не возвращается, но все равно не отображается выбранное значение :(Чтобы передать данные из дочернего компонента в родительский компонент
В родительском компоненте:
В дочернем компоненте:
источник
this.getData = this.getData.bind(this);
в конструкторе, так как вы можете получить this.setState не является функцией, если вы хотите манипулировать состоянием в getData.Я нашел подход, как получить данные от дочернего компонента у родителей, когда мне это нужно.
родитель:
Ребенок:
В этом примере показано, как передать функцию из дочернего компонента в родительский и использовать эту функцию для получения данных от дочернего компонента.
источник
Учитывая, что компоненты React Function и использование хуков становятся все более популярными в наши дни, я приведу простой пример передачи данных от дочернего к родительскому компоненту.
в компоненте родительской функции мы будем иметь:
затем
и передача setChildData (которая выполняет работу, аналогичную this.setState в компонентах класса) дочернему элементу
в дочернем компоненте сначала мы получаем реквизит
тогда вы можете передавать данные в любом случае, как с помощью функции обработчика
источник
Метод React.createClass устарел в новой версии React, вы можете сделать это очень просто следующим образом: создать один функциональный компонент и другой компонент класса для поддержания состояния:
родитель:
Ребенок:
источник
от дочернего компонента к родительскому компоненту, как показано ниже
родительский компонент
дочерний компонент
Надеюсь эта работа
источник
в
React v16.8+
компоненте функции вы можете использоватьuseState()
для создания состояния функции, которое позволит вам обновить родительское состояние, затем передать его дочернему элементу в качестве атрибута props, а затем внутри дочернего компонента вы можете вызвать функцию родительского состояния, ниже приведен рабочий фрагмент :источник
Вы даже можете избежать функции у родителя, обновляющего состояние напрямую
В родительском компоненте:
В дочернем компоненте:
источник
Идея состоит в том, чтобы отправить обратный вызов ребенку, который будет вызван, чтобы вернуть данные
Полный и минимальный пример с использованием функций:
Приложение создаст дочерний элемент, который вычислит случайное число и отправит его обратно родителю, что приведет
console.log
кисточник
Родительский компонент: -TimeModal
Примечание : - onSelectPouringTimeDiff = {this.handleTimeValue}
В дочернем компоненте вызов реквизита при необходимости
источник