繁体   English   中英

反应选择和axios问题

[英]React-select and axios issue

这可能与我不了解JavaScript的工作原理(非常奇怪)有关,但是我真的不明白为什么会这样。 我有这段React / React-select代码,几乎完全来自react-select自述文件:

  class Status extends Component {
    constructor(props) {
        super(props)
        this.state = {
          selectedOption: null,
        }
        this.statusOptions = [];
    }
    handleChange = (selectedOption) => {
        this.setState({ selectedOption });
        console.log(`Option selected:`, selectedOption);
    }
    componentDidMount = () => {
        console.log(this.statusOptions);
            axios.get(host+'/StatusList')
                .then((response) => {
                    for(var i = 0; i < response.data.status_list.length; i++) {
                        this.statusOptions.push({value: response.data.status_list[i][0], label: response.data.status_list[i][1]});
                    }
                })
                .catch((error) =>{
                    console.log(error)
                })
                .then(() =>{

                });

    }
    render() {
        const { selectedOption } = this.state;

        return (
            <Select
                value={selectedOption}
                onChange={this.handleChange}
                options={this.statusOptions}
            />
        );
    }}

这不会填充我的react-select列表:但是,将列表/数组初始化移动到componentDidMount使其可以工作。 为什么??

  class Status extends Component {
    constructor(props) {
        super(props)
        this.state = {
          selectedOption: null,
        }
    }
    handleChange = (selectedOption) => {
        this.setState({ selectedOption });
        console.log(`Option selected:`, selectedOption);
    }
    componentDidMount = () => {
        this.statusOptions = [];
        console.log(this.statusOptions);
            axios.get(host+'/StatusList')
                .then((response) => {
                    for(var i = 0; i < response.data.status_list.length; i++) {
                        this.statusOptions.push({value: response.data.status_list[i][0], label: response.data.status_list[i][1]});
                    }
                })
                .catch((error) =>{
                    console.log(error)
                })
                .then(() =>{

                });

    }
    render() {
        const { selectedOption } = this.state;

        return (
            <Select
                value={selectedOption}
                onChange={this.handleChange}
                options={this.statusOptions}
            />
        );
    }}

正确的方法是在React组件的状态中初始化一个statusOptions属性,然后在Axios调用快乐路径中填充它,以便setState方法触发重新渲染以填充选择组件。

class Status extends Component {
  constructor(props) {
    super(props)
    this.state = {
      selectedOption: null,
      statusOptions: []
    }
  }

  handleChange = (selectedOption) => {
    this.setState({ selectedOption });
    console.log(`Option selected:`, selectedOption);
  }

  componentDidMount = () => {
    axios.get(host+'/StatusList')
      .then((response) => {
        const statusOptions = []

        for(var i = 0; i < response.data.status_list.length; i++) {
          statusOptions.push({value: response.data.status_list[i][0], label: response.data.status_list[i][1]});
        }
        this.setState({ statusOptions })
      })
      .catch((error) =>{
        console.log(error)
      })
  }

  render() {
    const { selectedOption, statusOptions } = this.state;

    return (
      <Select
        value={selectedOption}
        onChange={this.handleChange}
        options={statusOptions}
      />
    );
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM