【发布时间】:2020-08-03 14:07:47
【问题描述】:
为了更好地学习 React、TypeScript 和 Context / Hooks,我正在制作一个简单的 Todo 应用程序。但是,使上下文所需的代码感觉很麻烦。
例如,如果我想更改 Todo 的内容,我必须在三个地方更改它(ITodo 接口、默认上下文值、默认状态值)。如果我想传递新的东西,我必须在三个地方(TodoContext、TodoContext 的默认值和 value=)。有没有更好的办法不用写那么多代码?
import React from 'react'
export interface ITodo {
title: string,
body?: string,
id: number,
completed: boolean
}
interface TodoContext {
todos: ITodo[],
setTodos: React.Dispatch<React.SetStateAction<ITodo[]>>
}
export const TodoContext = React.createContext<TodoContext>({
todos: [{title: 'loading', body: 'loading', id: 0, completed: false}],
setTodos: () => {}
})
export const TodoContextProvider: React.FC<{}> = (props) => {
const [todos, setTodos] = React.useState<ITodo[]>([{title: 'loading', body: 'loading', id: 0, completed: false}])
return (
<TodoContext.Provider value={{todos, setTodos}}>
{props.children}
</TodoContext.Provider>
)
}
【问题讨论】:
-
理想情况下这看起来不错,但您可以使用 redux 并将其存储在 redux-store 中,并使用 react-redux connect react-redux.js.org/api/connect 使其可在任何级别访问
标签: reactjs typescript react-hooks