Javascript 儿童道具活动不包括';t持有母公司';中国的现状

Javascript 儿童道具活动不包括';t持有母公司';中国的现状,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我有一个状态变量,它保存动态创建的组件,但是,当我从作为道具传递给子级的函数访问状态时,我会从创建时的后面获取状态。当我记录useffect时不是这样 例如:我添加了3个子元素,在函数logMyChildren中,我获得了创建最后一个子元素之前的状态 第一个孩子mychildren是[] 第二个孩子myChildren是[{id为0的孩子] 第三个孩子myChildren是[{id为0的孩子,{id为1的孩子] 每次调用该函数时,它都会给每个子函数提供相同的状态 是否有一种方法可以获得当前状态(

我有一个状态变量,它保存动态创建的组件,但是,当我从作为道具传递给子级的函数访问状态时,我会从创建时的后面获取状态。当我记录useffect时不是这样

例如:我添加了3个子元素,在函数logMyChildren中,我获得了创建最后一个子元素之前的状态

第一个孩子
mychildren
是[]

第二个孩子
myChildren
是[{id为0的孩子]

第三个孩子
myChildren
是[{id为0的孩子,{id为1的孩子]

每次调用该函数时,它都会给每个子函数提供相同的状态

是否有一种方法可以获得当前状态(而不是来自过去的状态),而不考虑子级

const Parent = () => {
  const [myChildren, setMyChildren] = useState([])

  const addChild = () => {
    let id = myChildren.length + 1
    setMyChildren([
      ...myChildren,
      <Child key={id} id={id} logMyChildren={logMyChildren} />,
    ])
  }

  const logMyChildren = (id) => {
    console.log(id, myChildren)
  }

  useEffect(() => {
    console.log(myChildren)
  }, [myChildren])

  return (
    <>
      <button onClick={addChild}>Add a child</button>
      {myChildren && myChildren.map((child) => child)}
    </>
  )
}

const Child = ({ id, logMyChildren }) => {
  return (
    <>
      <p>A child with id {id}!</p>
      <button onClick={() => logMyChildren(id)}>X</button>
    </>
  )
}
const Parent=()=>{
const[myChildren,setMyChildren]=useState([])
常量addChild=()=>{
让id=myChildren.length+1
我的孩子们([
…我的孩子们,
,
])
}
const logMyChildren=(id)=>{
console.log(id,myChildren)
}
useffect(()=>{
console.log(myChildren)
},[myChildren])
返回(
添加一个孩子
{myChildren&&myChildren.map((child)=>child)}
)
}
const Child=({id,logMyChildren})=>{
返回(
id为{id}的孩子

logMyChildren(id)}>X ) }
每次运行
useffect()
时,它都具有更新的状态。
谢谢。

您遇到的问题是,您正在创建包含状态变量的
logMyChildren
(在您的示例中是
mychildren
)。 您可以使用
useRef

大概是这样的:

const stateRef = useRef();
stateRef.current = myChildren;
然后在
logMyChildren
中使用ref-
stateRef

console.log(id,stateRef.current);

你说得对,谢谢!但是,我需要状态来删除项,我想我会尝试使用Redux。您可以将deleteFunction传递给子组件。还有一个问题是,如果您不这样做,而是将一些对象映射到组件,那么您将在状态中创建子组件的数组-您没有这样的问题。为什么因为每次您都会将函数的“新鲜”实例传递给子组件。(在您的情况下,函数的前一个实例将阻塞在您的状态中,并且永远不会更新)。所以在这里您并不真正需要Redux,只是不使用状态中的组件,或者使用答案中提供的ref——但实际上在这种情况下,我不建议这样做