Estoy tratando de enviar datos desde un componente hijo a su padre de la siguiente manera:
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>
);
});
y aquí está el componente hijo:
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>
);
}
});
Lo que necesito es obtener el valor seleccionado por usuario en el componente principal. Recibo este error:
Uncaught TypeError: this.props.onSelectLanguage is not a function
¿Alguien puede ayudarme a encontrar el problema?
PD: el componente secundario está creando un menú desplegable a partir de un archivo json, y necesito que la lista desplegable muestre ambos elementos de la matriz json uno al lado del otro (como "aaa, inglés" como la primera opción!)
{
"languages":[
[
"aaa",
"english"
],
[
"aab",
"swedish"
],
}
<SelectLanguage onSelectLanguage={this.handleLanguage*Code*}/>
un error.handleLanguageCode: function(langValue) { this.setState({ language: langValue }).bind(this); },
pero devuelve un error:ncaught TypeError: Cannot read property 'bind' of undefined
createClass
Tryon enlaza automáticamente los métodos sin reacción.Respuestas:
Esto debería funcionar. Al devolver el accesorio, lo está enviando como un objeto, en lugar de enviarlo como un valor o, alternativamente, utilizarlo como un objeto en el componente principal. En segundo lugar, debe formatear su objeto json para que contenga pares de valores de nombre y el uso
valueField
ytextField
atributo deDropdownList
Respuesta corta
Padre:
Niño:
Detallado:
EDITAR:
Teniendo en cuenta que React.createClass está en desuso desde la versión 16.0 en adelante, es mejor seguir adelante y crear un Componente React extendiéndolo
React.Component
. Pasar datos del componente hijo al padre con esta sintaxis se verá asíPadre
Niño
Usando la
createClass
sintaxis que el OP utilizó en su respuesta ParentNiño
JSON
fuente
this.state.selectedLanguage
parece estar siempre nulo: / estoy usando DROPDOWNLIST dereact-widgets
Uncaught ReferenceError: value is not defined
. Hice este cambio:onChange={this.handleLangChange.bind(this, this.value)}
y no devuelve ningún error, pero aún así no muestra el valor seleccionado :(Para pasar datos del componente secundario al componente primario
En el componente principal:
En componente infantil:
fuente
this.getData = this.getData.bind(this);
en el constructor, ya que puede obtener esto. SetState no es una función si desea manipular el estado en getData.Encontré el enfoque de cómo obtener datos del componente hijo en los padres cuando lo necesito.
Padre:
Niño:
Este ejemplo muestra cómo pasar la función del componente hijo al padre y usar esta función para obtener datos del hijo.
fuente
Considerando los componentes de la función React y usando ganchos están volviendo más populares en estos días, daré un ejemplo simple de cómo pasar datos del componente secundario al principal
en el componente de función principal tendremos:
luego
y pasar setChildData (que hace un trabajo similar a this.setState en Class Components) a Child
en Child Component primero obtenemos los accesorios de recepción
entonces puede pasar datos de cualquier manera como usar una función de controlador
fuente
El método React.createClass ha quedado en desuso en la nueva versión de React, puede hacerlo de la siguiente manera para hacer que un componente funcional y otro componente de clase mantengan el estado:
Padre:
Niño:
fuente
del componente hijo al componente padre como se muestra a continuación
componente principal
componente hijo
Espero este trabajo
fuente
en el
React v16.8+
componente de función, puede usarlouseState()
para crear un estado de función que le permita actualizar el estado primario, luego pasarlo al secundario como un atributo de utilería, luego dentro del componente secundario puede activar la función de estado primario, el siguiente es un fragmento de trabajo :fuente
Incluso puede evitar que la función en el padre actualice el estado directamente
En el componente principal:
En el componente hijo:
fuente
La idea es enviar una devolución de llamada al niño que se llamará para devolver los datos
Un ejemplo completo y mínimo con funciones:
La aplicación creará un hijo que calculará un número aleatorio y lo enviará directamente al padre, lo que dará
console.log
como resultadofuente
Componente principal: -TimeModal
Nota : - onSelectPouringTimeDiff = {this.handleTimeValue}
En el componente secundario, llame a accesorios cuando sea necesario
fuente