我通常在Stack上发布代码相关的东西,但这更多的是关于社区的一般想法是什么的问题.
似乎有很多人主张使用Redux和React来管理数据/状态,但是在阅读和学习两者时,我遇到了一些看起来不太合适的东西.
在本页的底部:http://redux.js.org/docs/basics/UsageWithReact.html(传递商店)它建议使用React'Context'的"Magic".
一种选择是将其作为道具传递给每个容器组件.然而,它变得乏味,因为你必须通过表示组件连线存储,因为它们碰巧在组件树中深层渲染容器.
我们建议的选项是使用一个特殊的React Redux组件,该组件可以神奇地使商店可用于所有容器组件......
在React Context页面(https://facebook.github.io/react/docs/context.html)上面有一个警告:
上下文是一种先进的实验性功能.API可能会在将来的版本中发生变化.
然后在底部:
正如在编写清晰代码时最好避免使用全局变量一样,在大多数情况下应避免使用上下文...
不要使用上下文通过组件传递模型数据.明确地通过树线处理数据更容易理解......
Redux建议使用React'Context'功能,而不是store通过'props' 将其传递给每个组件.虽然React建议相反.
此外,似乎Dan Abramov(Redux的创建者)现在为Facebook(React的创建者)工作,只是为了让我更加困惑.
我注意到新功能portals做同样的事情,但是更好吗?我对门户网站了解不多,但这似乎是管理嵌套组件更新的新方法?我知道Reacts Context API是实验性的,注意到componentDidUpdate不再接收prevContext并且它们被丢弃了contextTypes。
我还注意到他们正在引入React 16的Portal API,并且不确定是否打算取代Context API。
因此,如上所述,React 16的Portal API是否打算取代Context API?
编辑:piggy带上这个主题,是在反应中管理i18n本地化的最佳方法吗?
我已经阅读了上下文API,它看起来像是一种解决React的单向数据通信问题的优雅方法。
但是,还有Redux可以很好地共享全球状态。
如果我使用上下文API和钩子,将会获得任何性能优势吗?
PS:我读到上下文API,我们将不得不检查渲染,因为它甚至会使整个应用有时重新渲染。
我同时学习了React和Redux,并全力投入Redux。基本上所有状态都存储在Redux中。我跟着标准allIds,byId状态形状图案为这里详述。
我的应用程序非常以数据为中心,它与API通讯,并且执行许多CRUD类型的操作-fetchAll,fetchById,添加,更新,删除。
API通信被隔离到一个“服务层”模块中,该模块是其自己的npm软件包。对该服务层的所有调用都在redux操作中,使用redux-thunk。
我已经意识到不需要将所有内容都放在Redux中,例如,确实需要在特定组件上使用数据。我想简化这种架构。
因此,我开始重构为自定义钩子。似乎因为我的状态形状更多是对象而不是标量,所以我应该使用useReducer而不是useState...
// reducer
// -------------------------
const initialState = {
adding: false,
updating: false,
deleting: false,
error: null,
items: null
};
const reducer = (state, action) => {
// implementation omitted for brevity. . .
}
const useItemsApi = () => {
const [state, dispatch] = useReducer(reducer, initialState);
// wrapped in useCallback because called in component's useEffect
const fetchItems = useCallback(async …Run Code Online (Sandbox Code Playgroud) 如果你已经在使用 redux,为什么还要使用react.useContext?我正在努力理解react.useContext相对于redux有什么好处。我有什么遗漏的吗?
我试图更深入地理解react.useContext和redux。因此,请解释为什么一种技术在技术上比另一种更适合某些情况。技术上有何差异?