gpt4 book ai didi

reactjs - ReactJS中如何将数据从子组件传递到父组件?

转载 作者:行者123 更新时间:2023-12-03 12:52:15 26 4
gpt4 key购买 nike

我正在尝试将数据从子组件发送到其父组件,如下所示:

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

谁能帮我找出问题所在吗?

附注子组件正在从 json 文件创建一个下拉列表,我需要下拉列表来显示彼此相邻的 json 数组的两个元素(例如:“aaa,english”作为首选!)

{  
"languages":[
[
"aaa",
"english"
],
[
"aab",
"swedish"
],
}

最佳答案

这应该有效。在发送回 prop 时,您将其作为对象发送,而不是将其作为值发送,或者将其用作父组件中的对象。其次,您需要格式化 json 对象以包含名称值对,并使用 DropdownList

valueFieldtextField 属性

简答

父级:

<div className="col-sm-9">
<SelectLanguage onSelectLanguage={this.handleLanguage} />
</div>

child :

handleLangChange = () => {
var lang = this.dropdown.value;
this.props.onSelectLanguage(lang);
}
<小时/>

详细:

编辑:

考虑到 React.createClass 从 v16.0 开始已被弃用,最好通过扩展 React.Component 来创建 React 组件。使用此语法将数据从子组件传递到父组件将如下所示

父级

class ParentComponent extends React.Component {

state = { language: '' }

handleLanguage = (langValue) => {
this.setState({language: langValue});
}

render() {
return (
<div className="col-sm-9">
<SelectLanguage onSelectLanguage={this.handleLanguage} />
</div>
)
}
}

child

var json = require("json!../languages.json");
var jsonArray = json.languages;

export class SelectLanguage extends React.Component {
state = {
selectedCode: '',
selectedLanguage: jsonArray[0],
}

handleLangChange = () => {
var lang = this.dropdown.value;
this.props.onSelectLanguage(lang);
}

render() {
return (
<div>
<DropdownList ref={(ref) => this.dropdown = ref}
data={jsonArray}
valueField='lang' textField='lang'
caseSensitive={false}
minLength={3}
filter='contains'
onChange={this.handleLangChange} />
</div>
);
}
}
<小时/>

使用OP在其答案中使用的createClass语法父级

const ParentComponent = React.createClass({
getInitialState() {
return {
language: '',
};
},

handleLanguage: function(langValue) {
this.setState({language: langValue});
},

render() {
return (
<div className="col-sm-9">
<SelectLanguage onSelectLanguage={this.handleLanguage} />
</div>
);
});

child

var json = require("json!../languages.json");
var jsonArray = json.languages;

export const SelectLanguage = React.createClass({
getInitialState: function() {
return {
selectedCode: '',
selectedLanguage: jsonArray[0],
};
},

handleLangChange: function () {
var lang = this.refs.dropdown.value;
this.props.onSelectLanguage(lang);
},

render() {

return (
<div>
<DropdownList ref='dropdown'
data={jsonArray}
valueField='lang' textField='lang'
caseSensitive={false}
minLength={3}
filter='contains'
onChange={this.handleLangChange} />
</div>
);
}
});

JSON:

{ 
"languages":[

{
"code": "aaa",
"lang": "english"
},
{
"code": "aab",
"lang": "Swedish"
},
]
}

关于reactjs - ReactJS中如何将数据从子组件传递到父组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38394015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com