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

标签 javascript reactjs

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

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 变量,它是用对象初始化的,我正在从 firebase 获取异步。您可以在useEffect 方法 中看到初始化的实现。对于我想为函数“fieldChangedHandler”传递 ref 的每个对象,用于管理输入值。

fieldChangedHandler 是我的 EstateParamsList 的一个方法。但是我无法获得 params!

的值

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

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

enter image description here

调用:

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>
}

最佳答案

为什么不用柯里化(Currying)函数?

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

当您调用更改函数时,您应该已经在范围内拥有正确的值:

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

关于javascript - 如何在传递给另一个组件的函数中获取 useState 变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58038587/

相关文章:

javascript - 如果B1=空如何通过脚本使A1=空?

javascript - ReactJS 动态函数赋值

javascript - 或者通过使用状态来 react native 渲染组件

reactjs - axios不向后端发送post数据

reactjs - 从嵌套的 StackNavigator 中隐藏 TabBar 的 react 导航屏幕

javascript - 如何像 JSON 一样通过这些路径获取嵌套的 Backbone 模型和集合?

javascript - 如何为不同的元素获取不同的父类

javascript - 使用 Webpack、React、Babel 组合时,React 代码未运行

javascript - javascript中同一类(对象)中的静态和非静态数据

javascript - 为什么不应用内联样式?