react并利用数组对象数据写一个全选与反选, 并响应式计算总价 ( 中文回答)
时间: 2024-03-06 07:48:33 浏览: 77
一个数据表有单价有数量,还有checkbox选择,然后计算总价
5星 · 资源好评率100%
好的,针对你的问题,我可以回答如下:
要实现全选与反选,我们可以通过在 state 中维护一个选中状态的数组,记录每个选项是否被选中。然后在渲染时,根据这个数组动态生成复选框,并给每个复选框绑定一个点击事件,点击时改变对应的选中状态。
具体代码实现:
```jsx
import React, { useState } from 'react';
function Checkbox({ checked, onChange }) {
return (
<input type="checkbox" checked={checked} onChange={onChange} />
);
}
function App() {
const [items, setItems] = useState([
{ name: 'item1', price: 10 },
{ name: 'item2', price: 20 },
{ name: 'item3', price: 30 },
]);
const [selected, setSelected] = useState(items.map(() => false));
function handleSelectAll() {
setSelected(selected.map(() => true));
}
function handleDeselectAll() {
setSelected(selected.map(() => false));
}
function handleToggleSelect(index) {
setSelected(selected.map((item, i) => i === index ? !item : item));
}
const totalPrice = items.reduce((total, item, index) => {
if (selected[index]) {
return total + item.price;
}
return total;
}, 0);
return (
<div>
{items.map((item, index) => (
<div key={index}>
<Checkbox
checked={selected[index]}
onChange={() => handleToggleSelect(index)}
/>
{item.name} - {item.price}
</div>
))}
<div>
<button onClick={handleSelectAll}>全选</button>
<button onClick={handleDeselectAll}>反选</button>
</div>
<div>总价:{totalPrice}</div>
</div>
);
}
export default App;
```
这里我们用了 ES6 的数组方法 map、reduce 等来实现数组操作。同时,为了响应式地计算总价,我们使用了 useState 来维护 state,以便 React 可以在状态发生变化时重新渲染界面。
阅读全文