javascript - Reactjs将数据传递给父级不起作用
问题描述
我正在尝试将选择的值从组件传递SelectInput
给Result
组件,但是出现错误
未捕获的 TypeError:this.props.onSelectedChange 不是 SelectInput.handleChange 的函数
class SelectInput extends React.Component {
constructor(props) {
super(props)
this.handleChange = this.handleChange.bind(this)
}
handleChange(event) {
console.log(event.target.value)
console.log('event.target.value')
this.props.onSelectedChange(event.target.value) //here getting error
}
render() {
return (
<select onChange={this.handleChange}>
<option value="item1">item1</option>
<option value="item2">item2</option>
<option value="item3">item3</option>
</select>
)
}
}
class Result extends React.Component {
constructor(props) {
super(props)
this.state = { result: '' }
}
render() {
return (
<h2>Selected :{this.state.result}</h2>
)
}
}
class App extends React.Component {
constructor(props) {
super(props)
this.state = { selected: '' }
this.handleOnSelect = this.handleOnSelect(this)
}
handleOnSelect(selected) {
console.log(selected)
//this.setState({ selected: selected })
}
render() {
return (
<div>
<SelectInput onSelectedChange={this.handleOnSelect} />
<Result />
</div>
)
}
}
ReactDOM.render(<App />, document.getElementById('root'))
编辑
如下更改行后,错误消失但所选值未传递给父级
<SelectInput onSelectedChange={()=>this.handleOnSelect} />
解决方案
class SelectInput extends React.Component {
constructor(props) {
super(props)
this.handleChange = this.handleChange.bind(this)
}
handleChange(event) {
console.log(event.target.value)
console.log('event.target.value')
this.props.onSelectedChange(event.target.value) //here getting error
}
render() {
return (
<select onChange={this.handleChange}>
<option value="item1">item1</option>
<option value="item2">item2</option>
<option value="item3">item3</option>
</select>
)
}
}
class Result extends React.Component {
constructor(props) {
super(props)
this.state = { result: '' }
}
render() {
return (
<h2>Selected :{this.state.result}</h2>
)
}
}
class App extends React.Component {
constructor(props) {
super(props)
this.state = { selected: '' }
this.handleOnSelect = this.handleOnSelect(this)
}
handleOnSelect(selected) {
console.log(selected)
//this.setState({ selected: selected })
}
render() {
return (
<div>
<SelectInput onSelectedChange={()=>this.handleOnSelect} />
<Result />
</div>
)
}
}
ReactDOM.render(
<App/>,
document.getElementById("root")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
你必须像这样调用函数。
<SelectInput onSelectedChange={()=>this.handleOnSelect} />
这是完整的代码。
class SelectInput extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
console.log(event.target.value);
console.log("event.target.value");
this.props.onSelectedChange(event.target.value); //here getting error
}
render() {
return (
<select onChange={this.handleChange}>
<option value="item1">item1</option>
<option value="item2">item2</option>
<option value="item3">item3</option>
</select>
);
}
}
class Result extends React.Component {
constructor(props) {
super(props);
this.state = { result: "" };
}
render() {
return <h2>Selected :{this.state.result}</h2>;
}
}
class App extends Component {
constructor(props) {
super(props);
this.state = { selected: "" };
this.handleOnSelect = this.handleOnSelect(this);
}
handleOnSelect(selected) {
console.log(selected);
//this.setState({ selected: selected })
}
render() {
return (
<div>
<SelectInput onSelectedChange={() => this.handleOnSelect} />
<Result />
</div>
);
}
}
推荐阅读
- git - git clone 不适用于 npm i,但可以单独使用
- asp.net-core-mvc - ASP.NET Core 3.1 MVC:创建模型时双转为 int
- java - 二叉搜索树 - 如何在“main”中调用我的 inOrder 方法,并从输出中省略空值?
- c# - 如何为 microsoft graph (C#) 创建 Web 服务
- nginx - 使用 nginx 重定向特定端点、特定 http 方法
- discord.py - 如何使用 GET /channels/{channel.id}/messages
- amazon-ec2 - yum - 如何在 ec2 上安装 gpg 密钥
- python - 在 Python 中忽略正则表达式匹配开始或结束时的空格或标点符号
- r - 在 Shiny 上下文中编辑 DT 对象时的外观问题
- python - VS Code 在脚本和终端中使用不同的 Python 解释器