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!一切都清楚:)祝你有愉快的一天:)