ReactJs选择不反映更新状态的标记

问题描述 投票:0回答:1

我有一个带有值的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中打开时,我可以看到状态更新。

reactjs react-redux redux-saga
1个回答
0
投票

这是因为.setState是一个异步功能。你可以阅读更多关于这个here的信息。这通常意味着您必须导致回调或承诺。

© www.soinside.com 2019 - 2024. All rights reserved.