【发布时间】:2020-09-16 10:28:39
【问题描述】:
这个表的一些上下文 - 我想创建一个表,用户可以在表头的下拉列表中选择一个选项并进行比较。所以这个表有两列,每一列代表被选中的数据。
我想要实现的是,当在第一列中选择 business 时,如何禁用 business / 防止它在第二列中被选中?因为比较两个相同的没有意义。
还有更好的方法来处理两个选择下拉菜单的 onChange 吗?目前我有两种方法,它们非常相似。我尝试只有一种 onChange 方法,但在选择一个时无法阻止两者都发生变化。
这是我到目前为止所做的:
import React, { useEffect, useState } from "react";
import "./styles.css";
const Table = () => {
const [plan, setPlan] = useState("business");
const [planToCompare, setPlanToCompare] = useState("pro");
const handleChange = (e) => {
e.preventDefault();
setPlan(e.target.value);
};
const handleChange2 = (e) => {
e.preventDefault();
setPlanToCompare(e.target.value);
};
const data = [
{
business: ["Lorem", "Ipsum", "Dolor sit amet"],
pro: ["Lorem 1", "Ipsum 2", "Dolor sit amet 3"],
free: ["Lorem 4", "Ipsum 5", "Dolor sit amet 6"]
}
];
const renderData = (plan1, plan2) => {
const arr = data[0][plan1];
const arr2 = data[0][plan2];
return arr.map((item, index) => (
<tr key={`plan_${index + 1}`}>
<td>{item}</td>
<td>{arr2[index]}</td>
</tr>
));
};
return (
<div className="container">
<table>
<thead>
<tr>
<th>
<select datachosen={plan} onChange={(e) => handleChange(e)}>
<option value={"business"}>Business</option>
<option value={"pro"}>Pro</option>
<option value={"free"}>Free</option>
</select>
</th>
<th>
<select
id={"select2"}
datachosen={planToCompare}
onChange={(e) => handleChange2(e)}
>
<option value={"pro"}>Pro</option>
<option value={"free"}>Free</option>
<option value={"business"}>Business</option>
</select>
</th>
</tr>
</thead>
<tbody>{renderData(plan, planToCompare)}</tbody>
</table>
</div>
);
};
export default Table;
这是一个有效的codesandbox 以查看完整视图
【问题讨论】:
标签: javascript reactjs