具有复杂类型的 React TypeScript UseContext 不起作用

鳄鱼

此链接中的 ThemeContext示例有效,但它仅提供一个字段。我尝试将此示例用于复杂类型的 UserContext。状态已设置,但未呈现。

我发布了codeandbox示例。

第一个按钮切换状态主题。

第二个按钮更改 User.auth 状态,但不呈现页面。

当您单击第一个按钮时,您可以看到状态已正确设置。

有谁知道我做错了什么?

亚历克斯·韦恩

问题在这里:

if (aUser.authorized) {
  aUser.authorized = false;
  setUser(aUser);
} else {
  aUser.authorized = true;
  setUser(aUser);
}

你正在改变你所在州的一个对象。你不应该那样做。React 通过查看 state 是否具有相同的对象来测试它是否应该重新渲染。由于你没有传入一个新对象,React 不知道它应该重新渲染。

你可能想要这个:

function toggleAuth() {
  setUser({ ...user, authorized: !user.authorized })
}

通过这种方式,您创建了一个新对象以传递给setState,React 会看到它是一个新对象,然后会按照您的预期重新渲染。


主题切换起作用的原因是它使用了这个功能:

function togleTheme() {
  theme === Theme.Dark ? setTheme(Theme.Light) : setTheme(Theme.Dark);
}

每次切换时都会传入一个完全不同的值,而不会对现有对象进行任何更改。所以 React 可以注意到它们不同并重新渲染。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Typescript,React中的复杂类型

添加带有 React、Typescript 和 useContext 的元素

React Native TypeScript TextInput不起作用

React Native Typescript模板不起作用

TypeScript React setState 不起作用

如何使用react和typescript使用usecontext?

React + Typescript中的HOC示例不起作用

下拉onchange不起作用:React + Typescript +语义UI反应

React typescript 样式的组件滑块在组件中不起作用

TypeScript 3.0 React defaultProps支持不起作用

event.currentTarget.files 在 React Typescript 上不起作用

React + TypeScript + Redux连接功能不起作用

React Navigation 4.x tabBarOptions不起作用Typescript

CSS Margin 在 React typescript 项目中不起作用

单击子组件 React Typescript 不起作用

React-TypeScript API 搜索功能不起作用

React-Typescript:我没有找到为什么我的 getCurrentTime 函数不起作用的问题

用于可为空类型的TypeScript防护不起作用

TypeScript-联合类型不起作用的函数返回

Nuxt + TypeScript 类型在布局和插件中不起作用

在 typescript 中构建 React usecontext 出现编译问题

React Native useContext错误:元素类型无效

如何为 React 的 useContext 添加类型定义?

React + Typescript:复制自定义组件的道具-React.PropsWithoutRef对我不起作用

React中的打字稿:道具类型检查不起作用

道具类型在React应用程序中不起作用

Bootstrap modal在React Typescript应用程序中不起作用,但在小提琴上起作用

带有React Native Navigation的Touchable onPress不起作用

添加 react-beautiful-dnd 有警告;不起作用