【发布时间】:2021-09-25 04:24:11
【问题描述】:
https://codesandbox.io/s/fast-glitter-3mpwx
嗨,
在上面的代码框中,有两个路由器链接设计和构建,每个链接都包含一个计数器组件,其中 DesignContextProvider 用于设计,BuildContextProvider 用于构建
计数器变量在BuildContext 和DesignContext 中都可用,所以当我从BuildContext 增加计数器并切换到设计路线BuildContext 丢失数据,重置为0,反之亦然DesignContext ,感觉 Context 正在重新渲染并应用初始状态
我想要实现的是,即使在切换HashRouter 链接之后,也要在两个上下文上维护数据
构建上下文:
import { createContext, Component } from "react";
export class BuildContextProvider extends Component {
state = {
counter: 0,
};
updateCounter = () => {
this.setState({
counter: this.state.counter + 1,
})
}
render() {
return(
<BuildContext.Provider
value={{ ...this.state, updateCounter: this.updateCounter }}
>
{this.props.children}
</BuildContext.Provider>
)
}
}
export const BuildContext = createContext();
设计上下文:
import { createContext, Component } from "react";
export class DesignContextProvider extends Component {
state = {
counter: 0,
};
updateCounter = () => {
this.setState({
counter: this.state.counter + 1,
})
}
render() {
return(
<DesignContext.Provider
value={{ ...this.state, updateCounter: this.updateCounter }}
>
{this.props.children}
</DesignContext.Provider>
)
}
}
export const DesignContext = createContext();
App.js
<Switch>
<Route path="/build">
<BuildContextProvider>
<Build></Build>
</BuildContextProvider>
</Route>
<Route path="/design">
<DesignContextProvider>
<Design></Design>
</DesignContextProvider>
</Route>
</Switch>
构建和设计组件:
const Build = () => {
const { updateCounter, counter } = useContext(BuildContext);
return(
<div>
<button onClick={updateCounter}>+</button>
<span>{counter}</span>
</div>
)
}
const Design = () => {
const { updateCounter, counter } = useContext(DesignContext);
return(
<div>
<button onClick={updateCounter}>+</button>
<span>{counter}</span>
</div>
)
}
【问题讨论】:
标签: reactjs react-router-dom react-context