reactjs - 使用 TypeScript 的 useContext / createContext - 类型必须有一个返回迭代器的“[Symbol.iterator]()”方法
问题描述
我阅读了 Kent C. Dodds 的文章 Application State Management with React。
我想使用 TypeScript 而不是 JavaScript。
但是当我想破坏上下文时,我失败了
应用程序本身有效。这只是一个 IDE 错误,但根据我的经验,如果有 IDE 错误,您应该修复它。
这是关于以下行
const [count, setCount] = context
TS2488: Type 'number' must have a '[Symbol.iterator]()' method that returns an iterator.
完整代码:
计数上下文.tsx
import React, {createContext, useContext} from "react";
const initialState = 0
const CountContext = createContext(initialState)
function useCount() {
const context = useContext(CountContext)
if (!context) {
throw new Error(`useCount must be used within a CountProvider`)
}
/*
* This gives error
* TS2488: Type 'number' must have a '[Symbol.iterator]()' method that returns an iterator.
*/
const [count, setCount] = context
const increment = () => setCount((c: number) => c + 1);
const decrement = () => setCount((c: number) => c - 1);
return {
count, increment, decrement
}
}
function CountProvider(props: any) {
const [count, setCount] = React.useState(initialState)
const value = React.useMemo(() => [count, setCount], [count])
return <CountContext.Provider value={value} {...props} />
}
export {CountProvider, useCount}
页面.tsx
import React from 'react'
import {CountProvider, useCount} from "./count-context";
function Counter() {
const {increment, decrement} = useCount()
return (
<>
<button onClick={decrement}> Count down</button>
<br/>
<button onClick={increment}> Count up</button>
</>
)
}
function CountDisplay() {
const {count} = useCount()
return <p>The current counter count is {count}</p>
}
export function CountPage() {
return (
<div>
<h1>Count Page</h1>
<CountProvider>
<CountDisplay/>
<Counter/>
</CountProvider>
</div>
)
}
解决方案
推荐阅读
- ruby - Ruby 网页抓取产生两个数字,我只想要一个
- file - 如何在文件下载之前处理文件?
- python - 删除文件replace()中的多个字符串不起作用
- c - 环境变量 C
- python - 如何从 Python 中正在运行的进程中获取单个进程 ID 整数?
- javascript - 保存失败:VSCode中权限不足
- c - 如何理解 O_RDONLY = 0?
- firebase - 如何在启动时解决 Firebase CLI 错误
- typescript - 如何按时间倒序对 create-daml-app 项目中的消息进行排序?
- c++ - Why libraries automatically added?