【问题标题】:How to map an array of strings from react state to a select box如何将字符串数组从反应状态映射到选择框
【发布时间】:2023-04-04 02:47:01
【问题描述】:

我在第一个选择框中读取了一个 json 文件并将值设置为状态,但我不知道如何将该值读取到另一个选择框。我得到的只是整个数组作为一个字符串。

这是我从第一个选择框中将状态设置为对象的代码:

constructor(props) {
    super(props);
    this.state = {
        selectedCourse: {}
        
    };
    this.onSelectCourse = this.onSelectCourse.bind(this);
}
onSelectCourse(e) {
    console.log(e.target);
    this.setState(
        {
            selectedCourse: {
                ...this.state.selectedCourse,
                [e.target.id]: [e.target.value]
            }
        },
        () => {
            console.log(this.state);
        }
    );
}

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

这是第一个选择框:

<select onChange={this.onSelectCourse}>{CoursesList.courses.map((item, i) =><option key={i} value={item.dates}>{item.name}</option>)}</select>

这是我要显示状态对象数组中的数据的选择框:

<select>{Object.entries(this.state.selectedCourse).map((item) =><option key={item}>{item}</option>)}</select>

【问题讨论】:

    标签: javascript python reactjs


    【解决方案1】:

    Object.entries() 方法返回给定对象自己的可枚举字符串键属性 [key, value] 的数组

    表示.map 函数中的每个item 都是一个数组,例如[key, value]

    我认为你想做的是,

    <select>
    {Object.entries(this.state.selectedCourse)
      .map(
       ([key, value]) => (<option key={key} value={value}>{value}</option>)
      )
    }
    </select>
    

    如果您只想要对象值而不是键,您可以使用Object.values() 或反向Object.keys()


    另外,在您的setState 中,您正在访问[e.target.id],但您的&lt;option&gt; 标签没有id 属性集。


    编辑

    正如 OP 所指出的,

    但在我的选择框中我仍然得到:2017-05-03,2018-02-01(作为一个选项)

    我认为这可能是因为第一个选择字段中的item.dates (&lt;option key={i} value={item.dates}&gt;{item.name}&lt;/option&gt;)。 item.dates 是一个数组吗?我建议你检查你的 JSON。

    【讨论】:

    • 我已经添加了一个 id 属性,就像你提到的那样,并且还更改了代码。但是在我的选择框中,我仍然得到:2017-05-03,2018-02-01(作为一个选项),而不是按顺序列出,例如:选项 1->2017-05-03 选项 2->2018-02 -01.
    • 我认为罪魁祸首是item.dates,它可能是一个数组。我已经更新了我的答案,但如果它仍然不起作用,请通过包含您正在阅读的 JSON 文件来更新您的问题。
    猜你喜欢
    • 2020-06-24
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多