如何取消选中 useEffect
How to uncheck with useEffect
我有一个如下图所示的行列表。当您单击多个复选框以选择多行时,selectedIds
将作为道具传递给 PostBulkActionButtons。
这是我的 PostBulkActionButtons 组件:
export default function PostBulkActionButtons(props) {
const [recipes, setRecipes] = useState([]);
const ids = props.selectedIds;
useEffect(() => {
ids.map((id) => {
async function fetchData(id) {
const res = await ajax.getMealPlan(id);
setRecipes((recipes) => [...recipes, res.data.data]);
}
fetchData(id);
});
}, [ids]);
return <div>{recipes}</div>;
}
问题是当我取消选中一行时,食谱仍然包含未选中的行。我知道上面的代码会在每个 select 上生成重复的行,我已经设法解决了这个问题!
任何 suggestions/solutions 将不胜感激!
谢谢!
当您执行 setRecipes((recipes) => [...recipes, res.data.data]);
时,您永远不会从 recipes
数组中删除数据,只会添加。您需要过滤数组,以删除未经检查的 ID。
试试这个,希望对你有帮助
export default function PostBulkActionButtons(props) {
const [recipes, setRecipes] = useState([]);
const ids = props.selectedIds;
useEffect(() => {
ids.map((id) => {
async function fetchData(id) {
const res = await ajax.getMealPlan(id);
const data = res.filter(i => i === recipes);
setRecipes((recipes) => [...recipes, data]);
}
fetchData(id);
});
}, [ids]);
return <div>{recipes}</div>;
我有一个如下图所示的行列表。当您单击多个复选框以选择多行时,selectedIds
将作为道具传递给 PostBulkActionButtons。
这是我的 PostBulkActionButtons 组件:
export default function PostBulkActionButtons(props) {
const [recipes, setRecipes] = useState([]);
const ids = props.selectedIds;
useEffect(() => {
ids.map((id) => {
async function fetchData(id) {
const res = await ajax.getMealPlan(id);
setRecipes((recipes) => [...recipes, res.data.data]);
}
fetchData(id);
});
}, [ids]);
return <div>{recipes}</div>;
}
问题是当我取消选中一行时,食谱仍然包含未选中的行。我知道上面的代码会在每个 select 上生成重复的行,我已经设法解决了这个问题! 任何 suggestions/solutions 将不胜感激!
谢谢!
当您执行 setRecipes((recipes) => [...recipes, res.data.data]);
时,您永远不会从 recipes
数组中删除数据,只会添加。您需要过滤数组,以删除未经检查的 ID。
试试这个,希望对你有帮助
export default function PostBulkActionButtons(props) {
const [recipes, setRecipes] = useState([]);
const ids = props.selectedIds;
useEffect(() => {
ids.map((id) => {
async function fetchData(id) {
const res = await ajax.getMealPlan(id);
const data = res.filter(i => i === recipes);
setRecipes((recipes) => [...recipes, data]);
}
fetchData(id);
});
}, [ids]);
return <div>{recipes}</div>;