首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带tsx的useContext

带tsx的useContext
EN

Stack Overflow用户
提问于 2018-12-07 10:47:12
回答 2查看 1.8K关注 0票数 1

我正在使用useContext钩子和tsx

代码语言:javascript
复制
const StoreContext = createContext({});

export function useStore() {
   const [store] = useContext(StoreContext);
   return store;
}

export function useDispatch() {
    const [, dispatch] = useContext(StoreContext);
    return dispatch;
}

对于[store][dispatch],我都得到了相同的错误。

类型“{}”不是数组类型

知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2018-12-30 20:26:27

通过为TypeScript提供一个类型参数告诉createContext上下文的类型。

考虑一下这个例子:

代码语言:javascript
复制
interface Theme {
  mode: 'light' | 'dark'
}

Thame是我们上下文的形状。这个接口需要转到createContext

代码语言:javascript
复制
const StoreContext = React.createContext<Theme>({ mode: 'dark' });

const { mode } = React.useContext(StoreContext);

(mode === 'dark') || (mode === 'light') // true

您的上下文不必是一个对象。在本例中,上下文由一个数字数组组成。

代码语言:javascript
复制
const StoreContext = React.createContext<number[]>([0]);

const [first, ...rest] = React.useContext(StoreContext);

(typeof first === 'number') // true
票数 3
EN

Stack Overflow用户

发布于 2018-12-30 16:39:20

我试着使用useContext,但是没有用。我看到了将ReactDOM和ReactDOM降级为16.7.0-alpha-2的建议,但这也不起作用。我的问题的解决方案是将组件封装在myContext.Consumer中。对于基于类的组件,可以使用yourClass.contextType = yourContext,然后可以使用"this.context“访问特性。请参阅以下文档:https://reactjs.org/docs/context.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53667957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档