Reactjs 父状态更新时更新子对象
我已经将父组件中的钩子与setState一起传递,当我通过子组件更新父组件时,它应该重新呈现这两个组件,但它没有Reactjs 父状态更新时更新子对象,reactjs,react-hooks,Reactjs,React Hooks,我已经将父组件中的钩子与setState一起传递,当我通过子组件更新父组件时,它应该重新呈现这两个组件,但它没有 // Parent const [chosenArticles, setChosenArticles] = React.useState<number[]>([]) ... <ChooseArticles setChosenArticles={setChosenArticles} chosenArticles=
// 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>
)
}
//父对象
const[chosenArticles,setChosenArticles]=React.useState([])
...
//孩子
导出默认值(道具:道具)=>{
const{item,setChosenArticles,chosenArticles}=props
常量checkItem=(articleId:number,check:boolean)=>{
让newArr:number[]=props.chosenArticles
如果(!检查){
新建推送(articleId)
}否则{
newArr=newArr.filter(item=>item!==articleId)
}
setChosenArticles([…newArr])
}
返回(
选择文章
{item.sub.map((sub:any,i:number)=>{
返回(
{sub.name}
{sub.cats.map((cat:any,i:number)=>{
常数被检查=
chosenArticles.filter(c=>c==cat.id).length>0
真的吗
:错
返回(
检查项(类别id,已检查)}
已检查={isChecked}
/>
{cat.name}
)
})}
)
})}
)
}
这不应该奏效吗?当我再次手动挂载childcomponent时,它会被更新为正确的值
稍后我使用状态值在childcomponent中勾选复选框。您是否可以共享所有组件结构,至少子组件?是否从childcomp添加了jsx?是否正确更新状态?哪个组件不重新渲染,父组件还是子组件?嗨,很抱歉这里没有更新,当我注意到调用此组件的父组件位于react树的上方时,我使用上下文制作了一个大oopsie,因此这不是问题。无论如何,谢谢!