reactjs - 当父状态更新时,React 钩子会更新子状态
问题描述
我在与 setState 一起传递的父组件中有钩子,当我通过子更新父组件时,它应该重新渲染两者,但它没有。
// Parent
const [chosenArticles, setChosenArticles] = React.useState<number[]>([])
...
<ChooseArticles
setChosenArticles={setChosenArticles}
chosenArticles={chosenArticles}
/>
// Child
export default (props: Props) => {
const { item, setChosenArticles, chosenArticles } = props
const checkItem = (articleId: number, check: boolean) => {
let newArr: number[] = props.chosenArticles
if (!check) {
newArr.push(articleId)
} else {
newArr = newArr.filter(item => item !== articleId)
}
setChosenArticles([...newArr])
}
return (
<ChildComp>
<ChildTopText>Choose Articles</ChildTopText>
<ChildInner>
{item.sub.map((sub: any, i: number) => {
return (
<Sub key={i}>
<ArticleGroup>{sub.name}</ArticleGroup>
{sub.cats.map((cat: any, i: number) => {
const isChecked =
chosenArticles.filter(c => c === cat.id).length > 0
? true
: false
return (
<SubItem key={cat.id}>
<CheckBox
onPress={() => checkItem(cat.id, isChecked)}
checked={isChecked}
/>
<SubName>{cat.name}</SubName>
</SubItem>
)
})}
</Sub>
)
})}
</ChildInner>
</ChildComp>
)
}
这不应该工作吗?当我再次手动安装子组件时,它会更新为正确的值。
我稍后使用状态值来勾选子组件中的复选框。
解决方案
推荐阅读
- node.js - Deno 1.1.1 静态 HTTP 服务器
- visual-studio-code - 打开 Visual Studio 代码时出现黑屏
- .net - appsettings.json 文件中的 JSON 变量替换在 Azure DevOps 版本中不起作用
- mysql - Sequelize NM 关联无法识别包含模型
- asp.net-core - 如何发送 formdata 以及一些附加参数
- php - 如何将面包屑模式数据的编号从 1 替换为 ....?
- python - Python matplotlib 保存数字
- c - 退出循环后奇怪的多维数组值
- javascript - ReactJS 在键入字段并同时保存原始数据时自动格式化
- android - 当我使用“内置支持双向数据绑定”时,我不需要编写额外的代码吗?