我在react js应用中使用下拉菜单,但是onChange不会触发
我的代码是
import React from "react";
import PropTypes from "prop-types";
import Dropdown from 'react-dropdown';
const options = [
{ value: 'one', label: 'One' },
{ value: 'two', label: 'Two', className: 'myOptionClassName' },
];
class WebDashboardPage extends React.Component {
constructor(props) {
super(props);
this.state = {}
}
quan = (event)=> {
console.log("Option selected:");
this.setState({ value: event.target.value });
};
render() {
return(
<b><Dropdown className="dropdownCss" options={options} onChange={e =>
this.quan(e.target.value)} /></b>
);
}
当我单击下拉菜单中的项目时,会显示错误
“ TypeError:无法读取未定义的属性'quan'”
我是新手要回应 预先感谢
答案 0 :(得分:1)
react-dropdown
库没有问题。这是我设置并更正OP的代码的code sandbox。有用。
import React from "react";
import Dropdown from "react-dropdown";
import "react-dropdown/style.css";
const options = [
{ value: "one", label: "One" },
{ value: "two", label: "Two", className: "myOptionClassName" }
];
const defaultOption = options[0];
class WebDashboardPage extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedValue: ""
};
}
quan = value => {
this.setState({ selectedValue: value });
};
render() {
return (
<Dropdown options={options} value={defaultOption} onChange={this.quan} />
);
}
}
export default WebDashboardPage;
答案 1 :(得分:0)
更改为
onChange={this.quan}
,同样在初始状态下,您也应该声明this.state.value
this.state = {
value: ''
}
还尝试在html元素而不是jsx上学习它
答案 2 :(得分:0)
您应该这样做:
<Dropdown className="dropdownCss" options={options} onChange={this.quan} />
尝试一下:
class WebDashboardPage extends React.Component {
constructor(props) {
super(props);
this.state = { value: '' }
this.quan = this.quan.bind(this);
}
quan(event) {
console.log("Option selected:");
this.setState({ value: event.target.value });
};
render() {
return(
<div><Dropdown className="dropdownCss" options={options} onChange={this.quan} /></div>
);
}
答案 3 :(得分:0)
似乎问题在于react-dropdown
组件本身。您需要在此处提出问题。
react-dropdown
组件可能未在某处使用this.props.onChange
或存在问题。
或者,该组件可能需要状态value
尚未定义?
this.state = {
value: ''
}
是造成问题的原因吗?
答案 4 :(得分:0)
您使用的下拉依赖项不会以事件作为参数触发onChange,而是使用选定的选项触发onChange。尝试更改
onChange={e =>
this.quan(e.target.value)}
到
onChange={this.quan}
并将quan更改为
quan = (selectedOption)=> {
console.log("Option selected:"+selectedOption.value);
this.setState({ value: selectedOption.value });
};
我已经在我的机器上尝试过它,并且可以正常工作。同样重要的是,不要按照您的方式放置选项,而是将其置于状态。我的最终代码是
class WebDashboardPage extends Component {
constructor(props) {
super(props);
const options = [
{
value: 'one',
label: 'One'
}, {
value: 'two',
label: 'Two',
className: 'myOptionClassName'
}
];
this.state = {options}
}
quan = (selectedOption) => {
console.log("Option selected:" + selectedOption.value);
this.setState({value: selectedOption.value});
};
render() {
return (<b><Dropdown className="dropdownCss" options={this.state.options} onChange={this.quan}/></b>);
}
}
答案 5 :(得分:0)
我只对代码做了一点重构。主要变化在于Dropdown
处理变化的方式。当您将函数传递给handleChange
时,Dropdown
在内部调用该函数并将选定的对象传递给它,因此您所需要做的就是创建一个具有一个参数的处理程序方法。用于更新状态。我还为值设置了初始状态。这是一个演示https://codesandbox.io/s/4qz7n0okyw
import React, { Component, Fragment } from "react";
import ReactDOM from "react-dom";
import Dropdown from "react-dropdown";
const options = [
{ value: "one", label: "One" },
{ value: "two", label: "Two", className: "myOptionClassName" }
];
class WebDashboardPage extends Component {
state = {
value: {}
};
quan = value => {
console.log("Option selected:", value);
this.setState({ value });
};
render() {
return (
<Fragment>
<Dropdown
className="dropdownCss"
options={options}
onChange={this.quan}
/>
</Fragment>
);
}
}
export default WebDashboardPage;