Estou tentando enviar dados de um componente filho para o pai, da seguinte maneira:
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>
);
});
e aqui está o componente filho:
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>
);
}
});
O que eu preciso é obter o valor selecionado por usuário no componente pai. Estou recebendo este erro:
Uncaught TypeError: this.props.onSelectLanguage is not a function
Alguém pode me ajudar a encontrar o problema?
PS O componente filho está criando uma lista suspensa a partir de um arquivo json, e eu preciso da lista suspensa para mostrar os dois elementos da matriz json próximos um do outro (como: "aaa, english" como a primeira opção!)
{
"languages":[
[
"aaa",
"english"
],
[
"aab",
"swedish"
],
}
<SelectLanguage onSelectLanguage={this.handleLanguage*Code*}/>
um erro de digitação.handleLanguageCode: function(langValue) { this.setState({ language: langValue }).bind(this); },
Mas ele retorna um erro:ncaught TypeError: Cannot read property 'bind' of undefined
createClass
vincula automaticamente métodos de não reação.Respostas:
Isso deve funcionar. Ao enviar o suporte de volta, você o envia como um objeto, em vez disso, envia-o como um valor ou, alternativamente, o usa como um objeto no componente pai. Em segundo lugar, você precisa formatar seu objeto json para conter pares de valor de nome e usar
valueField
etextField
atributo deDropdownList
Resposta curta
Pai:
Criança:
Detalhado:
EDITAR:
Considerando que React.createClass foi descontinuado da v16.0 em diante, é melhor ir em frente e criar um componente React estendendo
React.Component
. Passar dados do componente filho para o componente pai com esta sintaxe será semelhante aPai
Criança
Usando
createClass
a sintaxe que o OP usado em sua resposta ParentCriança
JSON:
fonte
this.state.selectedLanguage
parece ser sempre nulo: / Estou usando o DropdownList dereact-widgets
Uncaught ReferenceError: value is not defined
. Eu fiz essa alteração:onChange={this.handleLangChange.bind(this, this.value)}
e nenhum erro retorna, mas ainda não mostra o valor selecionado :(Para passar dados do componente filho para o componente pai
No componente pai:
No componente filho:
fonte
this.getData = this.getData.bind(this);
do construtor, pois você pode obter this.setState não é uma função se você deseja manipular o estado em getData.Eu encontrei a abordagem de como obter dados do componente filho nos pais quando eu precisar.
Pai:
Criança:
Este exemplo mostra como passar a função do componente filho para o pai e usar essa função para obter dados do filho.
fonte
Considerando que os componentes da função de reação e o uso de ganchos estão ficando mais populares atualmente, darei um exemplo simples de como passar dados do componente filho para o pai
no componente de função pai, teremos:
então
e passando setChildData (que executam um trabalho semelhante a this.setState nos componentes de classe) para Child
no componente filho primeiro, obtemos os adereços de recebimento
então você pode passar dados de qualquer maneira, como usar uma função de manipulador
fonte
O método React.createClass foi descontinuado na nova versão do React, você pode fazê-lo de maneira muito simples da seguinte maneira: criar um componente funcional e outro componente de classe para manter o estado:
Pai:
Criança:
fonte
do componente filho para o componente pai como abaixo
componente pai
componente filho
Espero que esse trabalho
fonte
no
React v16.8+
componente de função, você pode usaruseState()
para criar um estado de função que permita atualizar o estado pai, transmiti-lo ao filho como um atributo props e, dentro do componente filho, você pode disparar a função do estado pai. A seguir, um snippet de trabalho :fonte
Você pode até evitar a função no pai atualizando o estado diretamente
No componente pai:
No componente filho:
fonte
A idéia é enviar um retorno de chamada para a criança que será chamada para devolver os dados
Um exemplo completo e mínimo usando funções:
O aplicativo criará um filho que calculará um número aleatório e o enviará de volta diretamente aos pais, o que
console.log
resultará no resultadofonte
Componente pai: -TimeModal
Nota : - onSelectPouringTimeDiff = {this.handleTimeValue}
Na chamada Componente filho, adereços quando necessário
fonte