我有一个带有值的select标签并且实现了onChange,onChange触发一个redux动作并更新select标签选项中使用的状态(因此组件随状态更新而更新)
我尝试正常更新状态并使用回调函数。它没有帮助
import React from "react";
import { connect } from "react-redux";
export class SelectDestination extends React.Component {
constructor(props)
{
super(props);
this.state={defaultval:''}
}
onSelectChange = event => {
let val=event.target.value
this.setState({defaultval:event.target.value},function(){this.props.onSelectChange(val)})
};
render() {
let options = this.props.state.planets.filter((x)=>this.props.state.vistedDestinatons.indexOf(x.name)===-1);
console.log(options)
return (
<React.Fragment>
{
<select value={this.state.defaultval} onChange={this.onSelectChange} name="onselect">
{options.map(x => (
<option value={x.name.toString()}>{x.name}</option>
))}
</select>
}
</React.Fragment>
);
}
}
const mapStateToProps = state => {
return {
state: state
};
};
const mapDispatchToProps = dispatch => {
return {
onSelectChange: payLoad =>
dispatch({ type: "SELCT_CHNG", payload: payLoad })
};
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(SelectDestination);
我希望状态必须反映在select标签中。当在react-dev-tools中打开时,我可以看到状态更新。
这是因为.setState
是一个异步功能。你可以阅读更多关于这个here的信息。这通常意味着您必须导致回调或承诺。