Próbuję wysłać dane z elementu potomnego do jego elementu nadrzędnego w następujący sposób:
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>
);
});
a tutaj jest element potomny:
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>
);
}
});
Potrzebuję uzyskać wybraną wartość przez użytkownika w komponencie nadrzędnym. Otrzymuję ten błąd:
Uncaught TypeError: this.props.onSelectLanguage is not a function
Czy ktoś może mi pomóc znaleźć problem?
PS Komponent potomny tworzy listę rozwijaną z pliku json i potrzebuję listy rozwijanej, aby wyświetlić oba elementy tablicy json obok siebie (na przykład: „aaa, angielski” jako pierwszy wybór!)
{
"languages":[
[
"aaa",
"english"
],
[
"aab",
"swedish"
],
}
<SelectLanguage onSelectLanguage={this.handleLanguage*Code*}/>
literówka.handleLanguageCode: function(langValue) { this.setState({ language: langValue }).bind(this); },
Ale zwraca błąd:ncaught TypeError: Cannot read property 'bind' of undefined
createClass
rozpoznaje metody niereagujące.Odpowiedzi:
To powinno działać. Odsyłając rekwizyt z powrotem, wysyłasz go jako obiekt, a raczej wysyłasz jako wartość lub alternatywnie używasz go jako obiektu w komponencie nadrzędnym. Po drugie, musisz sformatować obiekt json, aby zawierał pary wartości nazwa oraz użycie
valueField
itextField
atrybutDropdownList
Krótka odpowiedź
Rodzic:
Dziecko:
Szczegółowe:
EDYTOWAĆ:
Biorąc pod uwagę, że React.createClass jest przestarzałe od wersji 16.0, lepiej jest iść dalej i stworzyć React Component poprzez rozszerzenie
React.Component
. Będzie wyglądało przekazywanie danych z elementu potomnego do elementu nadrzędnego za pomocą tej składniRodzic
Dziecko
Przy użyciu
createClass
składni, której OP użył w swojej odpowiedzi ParentDziecko
JSON:
źródło
this.state.selectedLanguage
Wydaje się być zawsze zerowy: / Używam od DropdownListreact-widgets
Uncaught ReferenceError: value is not defined
.onChange={this.handleLangChange.bind(this, this.value)}
Aby przekazać dane z komponentu podrzędnego do komponentu nadrzędnego
W komponencie nadrzędnym:
W komponencie podrzędnym:
źródło
this.getData = this.getData.bind(this);
w konstruktorze, ponieważ możesz dostać to. SetState nie jest funkcją, jeśli chcesz manipulować stanem w getData.Znalazłem podejście, jak uzyskać dane od komponentu podrzędnego od rodziców, kiedy są potrzebne.
Rodzic:
Dziecko:
Ten przykład pokazuje, jak przekazać funkcję z komponentu podrzędnego do nadrzędnego i użyć tej funkcji, aby uzyskać dane od potomka.
źródło
Rozważanie składników funkcji React i używanie haków stają się coraz bardziej popularne, dam prosty przykład przekazywania danych z elementu potomnego na element nadrzędny
w komponencie funkcji rodzica będziemy mieli:
następnie
i przekazanie setChildData (które wykonują zadanie podobne do this.setState w Class Components) do Child
w Child Component najpierw otrzymujemy rekwizyty
następnie możesz przekazać dane tak jak za pomocą funkcji obsługi
źródło
Metoda React.createClass została uznana za przestarzałą w nowej wersji React, możesz to zrobić bardzo prosto w następujący sposób, aby jeden komponent funkcjonalny i inny komponent klasy utrzymywał stan:
Rodzic:
Dziecko:
źródło
od elementu potomnego do elementu macierzystego, jak poniżej
komponent nadrzędny
składnik potomny
Mam nadzieję, że ta praca
źródło
w
React v16.8+
komponencie funkcji można użyćuseState()
do utworzenia stanu funkcji, który pozwala zaktualizować stan nadrzędny, a następnie przekazać go dziecku jako atrybutowi rekwizytów, a następnie w komponencie podrzędnym można uruchomić funkcję stanu nadrzędnego, poniżej znajduje się działający fragment kodu :źródło
Możesz nawet ominąć funkcję nadrzędną, aktualizując bezpośrednio stan
W komponencie nadrzędnym:
W elemencie potomnym:
źródło
Chodzi o to, aby wysłać do dziecka wywołanie zwrotne, które zostanie wywołane w celu zwrócenia danych
Kompletny i minimalny przykład użycia funkcji:
Aplikacja utworzy dziecko, które obliczy losową liczbę i odeśle ją bezpośrednio do rodzica, co da
console.log
wynikźródło
Składnik nadrzędny: -TimeModal
Uwaga : - onSelectPouringTimeDiff = {this.handleTimeValue}
W podrzędnym komponencie wywołania rekwizyty, gdy są wymagane
źródło