React 无法从不同组件的函数体内更新组件
React Cannot update a component from inside the function body of a different component
我用 Formik 和 react-reaflet 制作了一个表单,当用户点击按钮时,会出现一张带有预定义经度和纬度的地图,他可以在地图上导航并通过拖动光标自动更改其位置。
该功能按预期运行,但是当我单击光标更改位置时,React 在控制台中向我显示此错误 警告:渲染时无法更新组件 (Main
)不同的组件 (Formik
).。我试图解决它,但它仍然不起作用。我创建了这个 sandbox 这样你就可以看到错误是如何出现在控制台上的
问题出在components/mapper.js
ln:12。
你做到了:
setLatitude(latitude);
setLongitude(longitude);
就在渲染函数中。为什么要这样做?
只是为了概括@hackape 所说的,当使用功能组件时,不要在组件的主体上直接使用 setState
(您需要在定义上初始化状态或用 useEffect
包装它/其他可调用函数)
示例:
function MyComponent(props){
const [state, setState] = useState(0)
setState(5) // This is BAD
return <View />
}
解决方案:
function MyComponent(props){
const [state, setState] = useState(5) // This is good
return <View />
}
// -------- OR ---------
function MyComponent(props){
const [state, setState] = useState(0)
useEffect(()=>{
setState(5) // This is good
},[])
return <View />
}
我用 Formik 和 react-reaflet 制作了一个表单,当用户点击按钮时,会出现一张带有预定义经度和纬度的地图,他可以在地图上导航并通过拖动光标自动更改其位置。
该功能按预期运行,但是当我单击光标更改位置时,React 在控制台中向我显示此错误 警告:渲染时无法更新组件 (Main
)不同的组件 (Formik
).。我试图解决它,但它仍然不起作用。我创建了这个 sandbox 这样你就可以看到错误是如何出现在控制台上的
问题出在components/mapper.js
ln:12。
你做到了:
setLatitude(latitude);
setLongitude(longitude);
就在渲染函数中。为什么要这样做?
只是为了概括@hackape 所说的,当使用功能组件时,不要在组件的主体上直接使用 setState
(您需要在定义上初始化状态或用 useEffect
包装它/其他可调用函数)
示例:
function MyComponent(props){
const [state, setState] = useState(0)
setState(5) // This is BAD
return <View />
}
解决方案:
function MyComponent(props){
const [state, setState] = useState(5) // This is good
return <View />
}
// -------- OR ---------
function MyComponent(props){
const [state, setState] = useState(0)
useEffect(()=>{
setState(5) // This is good
},[])
return <View />
}