作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在第一个选择框中读取了一个 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>
最佳答案
The
Object.entries()
method returns an array of a given object's own enumerable string-keyed property [key, value]
表示每个item
在.map
函数是一个数组,例如 [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]
但是你的<option>
标签没有 id
属性集。
编辑:
正如 OP 所指出的,
But in my select box I still get: 2017-05-03,2018-02-01 (as one option)
我认为这可能是因为 item.dates
在第一个选择字段中(<option key={i} value={item.dates}>{item.name}</option>
)。是 item.dates
数组 ?我建议您检查您的 JSON。
关于javascript - 如何将字符串数组从 react 状态映射到选择框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67357778/
我是一名优秀的程序员,十分优秀!