Javascript 如何在传递给另一个组件的函数中获取useState变量的值

Javascript 如何在传递给另一个组件的函数中获取useState变量的值,javascript,reactjs,Javascript,Reactjs,描述问题的最佳方式是我的代码: function EstateParamsList({ estateType, category }) { const [isLoading, setIsLoading] = useState(true) const [params, setParams] = useState({}) const [showPopUp, setShowPopUp] = useState(false) useEffect(() => { if (ca

描述问题的最佳方式是我的代码:

function EstateParamsList({ estateType, category }) {
  const [isLoading, setIsLoading] = useState(true)
  const [params, setParams] = useState({})
  const [showPopUp, setShowPopUp] = useState(false)

  useEffect(() => {
    if (category && typeof category.id !== undefined) {
      return db.collection(`dictionaries/ESTATE_PARAMS/${estateType}/${category.id}/params`).onSnapshot(response => {
        const paramsObject = {}
        response.forEach(param => {
          paramsObject[param.id] = {
            ...convertParamObjetcToFieldsConfig(param.data()),
            change: fieldChangedHandler
          }
        })
        setParams(paramsObject)
        setIsLoading(false)
      })
    } else {
      setIsLoading(false)
    }
  }, [category])
 console.log(params)
  const fieldChangedHandler = (event, fieldIdentifier) => {
    if(params)
      console.log(params)
  }
所以我有params变量,该变量是im init with object,我从firebase获得异步。初始化的实现可以在useEffect method中看到。对于每个对象,我希望传递函数“fieldChangedHandler”的ref,以管理输入值

fieldChangedHandler是我的设置参数列表的一种方法。但是在那里我无法得到参数的值

问题是为什么?只有在呈现完所有内容并完成异步请求后,我才调用fieldChangedHandler

下面是参数的控制台日志。为什么函数中的参数为空

电话:

const renderParamsAsFields = params => {
  const fields = []
  for (const key in params) {
    fields.push(<Field {...params[key]} changed={event => params[key].change(event, key)} />)
  }
  return fields.length ? fields : <div className='EstateParamsManager-EmptyValues'>Нет параметров</div>
}
const renderParamsFields=params=>{
常量字段=[]
for(参数中的常量键){
fields.push(参数[key].change(事件,键)}/>)
}
返回字段。长度?字段:БцПааааа
}

为什么不使用curried函数

const createFieldChangedHandler = (
  params,
  fieldIdentifier
) => event => {
  if (params) console.log(params);
};

function EstateParamsList({ estateType, category }) {
//... other code
  useEffect(() => {
    //...other code
    change: createFieldChangedHandler(
       paramsObject,
       param.id
    ),
    //...other code
   }, [category, estateType]);//fixed missing dependency
调用change函数时,范围中应该已经有了正确的值:

<Field {...params[key]} changed={params[key].change} />


您究竟是如何调用fieldChangeHandler的?您没有看到
React Hook useEffect缺少依赖项:“estateType”和“fieldChangedHandler”
?这不是我问题的原因!。fieldChangedHandler不是依赖!你想告诉我,当用户在字段中输入内容时,我需要始终进行查询吗?@Christophengo我已经更新了我的帖子。电话号码。请重新阅读所有内容)我做了一些更改,您为什么要创建一个paramsObject作为对象,然后再创建一个数组(如果再次创建的话)。你可以只是对数组的响应,也可以考虑tat。这就是解决办法。我查过了。它起作用了。但是我不明白为什么我的例子不起作用。当我传递func时,可能是在做某种闭包,并覆盖func的主体而不是ref,这就是为什么我得到params的空对象,因为它是由empty初始化的object@WhoIsDT设置
change:fieldChangedHandler
params时为
{}
设置参数时,为参数创建一个新值,但fieldChangehandler在闭包中有
{}
。使用另一个选项,您将
paramsObject
放入闭包范围,然后对其进行变异。就是这样!所以谢谢你,HMR!一切都清楚:)祝你有愉快的一天:)