用 configureStore 替换 createStore
replacing createStore with configureStore
我更新了我的包,VScode 告诉我 createStore 已贬值。所以我着手更换它
我的商店文件,我在底部包含了原始行作为注释
import { configureStore } from '@reduxjs/toolkit';
import { Action, createStore } from 'redux'
export type State = { context: AudioContext | null}
export const START_AUDIO = "startAudio";
const initialState = {context: null}
const reducer = (state: State = initialState, action: Action<String>) => {
switch (action.type) {
case START_AUDIO:
if (state.context == null) {
return {
...state,
context: new AudioContext()
}
}
}
return state
}
export const Store = configureStore({reducer})
// export const Store = createStore(reducer)
使用 redux
export function AudioContext() {
const dispatch = useDispatch<Dispatch<Action<String>>>();
const context = useSelector((state: State) => state.context)
return (
<button disabled={(context == null) ? false : true} onClick={() => dispatch({type: START_AUDIO}) }>Start Audio Context</button>
)
}
应用组件
import '../styles/globals.css'
import Head from 'next/head'
import { Store } from '../code/util/store/store'
import { Provider } from 'react-redux'
import { AppProps } from 'next/app';
export default function MyApp({ Component, pageProps }: AppProps) {
return (<>
<Head>
<title>Test App</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<Provider store={Store}>
<Component {...pageProps} />
</Provider>
</>)
}
使用 configureStore()
控制台给了我一个 warning about putting non-serizible objects in state。他们说这是可能的,但是当我尝试使用它时,我收到 Maximum call stack size
错误。
我已经尝试删除 redux 状态对象的其他用途(除了设置它),但我仍然遇到这两个错误,我还尝试使用字符串,这删除了警告和错误。因此,无论出于何种原因,似乎不再支持在状态中使用 AudioContext
。
我做错了吗?我应该为此停止使用 Redux 吗?我还能如何实现这一目标?
我找到了这个 issue on github 然而,根据我的 node_modules
im 运行 7.18.0
of @babel/core
一般来说,Redux 是一个状态管理工具——状态的意思很简单:数据。通常该数据应表示为普通 JavaScript 对象或数组,而不是 class 实例。
你在这里做的更多是一个“依赖注入”用例:你有一个特定的 class 提供的功能,你想传递给子组件。
在这种情况下,我建议您使用 React Context,因为 Context 是一种依赖注入机制(但不太适合状态值传播 - 但首先您不想在这里做任何事情)。
我更新了我的包,VScode 告诉我 createStore 已贬值。所以我着手更换它
我的商店文件,我在底部包含了原始行作为注释
import { configureStore } from '@reduxjs/toolkit';
import { Action, createStore } from 'redux'
export type State = { context: AudioContext | null}
export const START_AUDIO = "startAudio";
const initialState = {context: null}
const reducer = (state: State = initialState, action: Action<String>) => {
switch (action.type) {
case START_AUDIO:
if (state.context == null) {
return {
...state,
context: new AudioContext()
}
}
}
return state
}
export const Store = configureStore({reducer})
// export const Store = createStore(reducer)
使用 redux
export function AudioContext() {
const dispatch = useDispatch<Dispatch<Action<String>>>();
const context = useSelector((state: State) => state.context)
return (
<button disabled={(context == null) ? false : true} onClick={() => dispatch({type: START_AUDIO}) }>Start Audio Context</button>
)
}
应用组件
import '../styles/globals.css'
import Head from 'next/head'
import { Store } from '../code/util/store/store'
import { Provider } from 'react-redux'
import { AppProps } from 'next/app';
export default function MyApp({ Component, pageProps }: AppProps) {
return (<>
<Head>
<title>Test App</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<Provider store={Store}>
<Component {...pageProps} />
</Provider>
</>)
}
使用 configureStore()
控制台给了我一个 warning about putting non-serizible objects in state。他们说这是可能的,但是当我尝试使用它时,我收到 Maximum call stack size
错误。
我已经尝试删除 redux 状态对象的其他用途(除了设置它),但我仍然遇到这两个错误,我还尝试使用字符串,这删除了警告和错误。因此,无论出于何种原因,似乎不再支持在状态中使用 AudioContext
。
我做错了吗?我应该为此停止使用 Redux 吗?我还能如何实现这一目标?
我找到了这个 issue on github 然而,根据我的 node_modules
im 运行 7.18.0
of @babel/core
一般来说,Redux 是一个状态管理工具——状态的意思很简单:数据。通常该数据应表示为普通 JavaScript 对象或数组,而不是 class 实例。
你在这里做的更多是一个“依赖注入”用例:你有一个特定的 class 提供的功能,你想传递给子组件。
在这种情况下,我建议您使用 React Context,因为 Context 是一种依赖注入机制(但不太适合状态值传播 - 但首先您不想在这里做任何事情)。