Reactjs 父状态更新时更新子对象

Reactjs 父状态更新时更新子对象,reactjs,react-hooks,Reactjs,React Hooks,我已经将父组件中的钩子与setState一起传递,当我通过子组件更新父组件时,它应该重新呈现这两个组件,但它没有 // Parent const [chosenArticles, setChosenArticles] = React.useState<number[]>([]) ... <ChooseArticles setChosenArticles={setChosenArticles} chosenArticles=

我已经将父组件中的钩子与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>
  )
}
//父对象
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,因此这不是问题。无论如何,谢谢!