javascript - useEffect 和 useContext 有问题,反应原生
问题描述
在这个例子中,我使用了一个上下文来保存用户数据,但是 useEffect 钩子在组件子组件上运行了几次,每次更改状态属性一次,即使名称只更改一次,但相同的 useEffect 正确执行仅在上下文中,为什么会发生这种情况?有办法取消这个效果吗?
上下文组件:
const AuthContext = createContext();
const AuthProvider = ({ children }) => {
const [name, setName] = useState(null)
const [user, setUser] = useState(null)
const [phone, setPhone] = useState(null)
const init = async () => {
const res = await profile()
setName(res.name)
setUser(res.user)
setPhone(res.phone)
}
useEffect(() => {
init()
}, [])
useEffect(() => {
console.log('I am context')
}, [name])
return (
<AuthContext.Provider
value={{
name
}}
>
{children}
</AuthContext.Provider>
)
}
子组件:
const Index = () => {
const { name } = useContext(AuthContext)
useEffect(() => {
console.log('I am children')
}, [name])
return <View></View>
}
解决方案
推荐阅读
- python - 在heroku上部署Django应用程序时没有名为'config.settings'的模块(仍然没有从其他问题得到答案)
- flutter - 当我在flutter中使用sharedpreference离线保存对象列表时,它会自动转换为字符串......输出如下
- git - Windows 上 git-bash 的奇怪 git 行为
- go - Golang::=语法左侧的预期标识符
- html - 如何更改 svg 图标的笔画宽度?
- excel - Excel 连接函数
- node.js - 带有 $strLenCP 运算符的 MongoDB 服务器版本错误,寻找替代方法来查找字符串的长度
- java - 如何在 VS 代码中将引用的库添加到 Selenium Java 项目?
- spring-boot - 有没有办法在将 PDF 保存为 BLOB(字节数组)时不丢失嵌入的链接?
- android - 在 android 仿真期间没有出现我的 Toast 警报