Javascript 与React路由器一起使用React上下文API-消费者不必要地重新呈现的问题

Javascript 与React路由器一起使用React上下文API-消费者不必要地重新呈现的问题,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我正在v16.3中使用React的新上下文api。我正在尝试在同样使用React路由器的React应用程序中设置自己的上下文。我看到一些奇怪的行为,不清楚我看到了什么以及如何避免它 我的理解是,使用新的上下文API,您可以创建一个上下文,使您能够访问提供者和使用者组件。使用者组件应采用渲染道具,该道具在提供者的值更改时执行 当我在路由器内部使用ContextProvider时,此行为会按预期工作。在这个沙盒()中,MyContext.Consumer的render prop每次执行时都会记录到控

我正在v16.3中使用React的新上下文api。我正在尝试在同样使用React路由器的React应用程序中设置自己的上下文。我看到一些奇怪的行为,不清楚我看到了什么以及如何避免它

我的理解是,使用新的上下文API,您可以创建一个上下文,使您能够访问提供者和使用者组件。使用者组件应采用渲染道具,该道具在提供者的值更改时执行

当我在路由器内部使用ContextProvider时,此行为会按预期工作。在这个沙盒()中,MyContext.Consumer的render prop每次执行时都会记录到控制台。它只注销一次,即使您更改了路由。这是我所期望的,因为MyContext.Provider的值没有改变

但是,如果我更改代码结构并尝试在路由器周围放置MyContext.Provider,则每次路由更改时都会执行MyContext.Consumer的render prop函数,即使Provider值没有更改。请参见此处的示例:

有人能解释一下这是怎么回事吗?这种行为是预期的吗?为什么会这样