【问题标题】:React Dropdown List - Selected Values Off By One反应下拉列表 - 选定的值减一
【发布时间】:2020-09-20 00:28:51
【问题描述】:

我在 React 中有一个下拉列表,其中填充了来自我的 api 的数据,效果很好。但是,当我在下拉列表中选择一个选项并记录结果时,它记录的结果始终显示比我选择的项目高 1 位的项目。我第一次选择时它也显示为空白,但之后的每次选择都显示为空白。有人看到我错过了什么吗?

import React, { Component } from 'react';
import { Editor } from '@tinymce/tinymce-react';


class TinyEditor extends Component {
    constructor(props) {
        super(props);

        this.state = { 
            content: '',
            policy: '',
            policies: []
         };

        this.selectPolicy = this.selectPolicy.bind(this);

    }

    componentDidMount() {
        console.log(`Component did mount`);
        fetch(`/api/policy/all`)
            .then(res => res.json())
            .then((result) => {
                console.log(result);
                this.setState({policies: result});
            });
    }


    selectPolicy(e) {
        this.setState({policy: e.target.value});
        console.log(this.state.policy);
    }

    render() {
                return (
            <div>
                <div className="container">

                    <select onChange={this.selectPolicy}
                            value={this.state.policy}>
                        <option default>Select Policy...</option>
                        { this.state.policies.map(item => (
                            <option key={item.policy}>{item.policy}</option>
                        ))}
                    </select>

                </div>
            </div>
        )
    }
}

export default TinyEditor;

【问题讨论】:

    标签: reactjs user-interface state dropdown


    【解决方案1】:

    您的控制台在完成 setSstate 之前被渲染, 试试下面的代码

    this.setState({policy: e.target.value}, ()=>console.log(this.state.policy)}

    这里console.log()只有在setState完成后才会被调用。

    【讨论】:

      猜你喜欢
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多