useReducer可以与状态数组一起使用吗?

廷博

我已经实现了一种相当简单的方法,可以useReducer使用以下命令将undo添加到其中:

export const stateMiddleware = reducerFunc => {
  return function(state = { history: [] }, action) {
    return {
      history:
        action.type === UNDO
          ? drop(state.history) // lodash drop
          : [reducerFunc(state.history[0], action), ...state.history],
    }
  }
}

const [state, dispatch] = useReducer(stateMiddleware(reducer), { history: [initialState] })

state变量由整个历史记录组成,因此必须从第一个元素中提取当前状态。

我想知道是否useReducer将接受state参数数组(也欢迎对我的方法发表评论-它避免使用似乎笨重的包装来做类似的事情)

福特04

为了给您一些有关通用方法的反馈,我将引用Redux文档,因为它们提供了许多有关全局状态管理的最佳实践。如果您以后需要充实的存储,这将使切换更加容易。我在这里假设您不仅要useReducer对一个本地组件使用,而且要对全局状态树使用更多(感谢@DrewReese对此发表评论)。如果只有一个组件左右,那么您的方法就可以了!

Redux有关基本状态形状的文档以及在顶层(Link都可以使用的数组

Redux状态通常具有一个普通的Javascript对象作为状态树的顶部。(当然也可以使用另一种类型的数据,例如单个数字,数组或专用数据结构,但是大多数库都假定顶级值是普通对象。)最常见的组织方式该顶级对象中的数据将进一步将数据划分为子树,其中每个顶级键代表相关数据的某个“域”或“切片”。

因此,基本上可以,但其他库也可能会被优化并期望有一个对象,因为它是迄今为止最可能的选择。

如果您采用这种形状,请确保您的要求始终整个状态需要执行撤消操作因为这是有代价的(除了提到的第3方库兼容性):

  • 直接在顶层添加另一层嵌套
  • 可扩展性和粒度(请参阅下一点)

如果您的应用程序变得非常庞大并且您有数百个减速器,那该怎么办。每次调度您的操作时,都会在history数组中放置一个新的状态对象,这可能会造成混乱。如果您不希望进行全局撤消,而是进行非常精细的撤消(在一种特定的reducer中,例如针对UI中的一种特定表单元素),那该怎么办?然后,您必须区分全局撤消和特定撤消。可以只在每个感兴趣的减速器中以自己的方式处理的一个“ UNDO”动作又如何呢?

如果仍然符合您的要求,请尝试一下!

干杯

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pyserial可以与隐藏设备一起使用吗?

Android SDK可以与JDK 1.7一起使用吗?

Freemarker可以与Struts 1.1一起使用吗?

我可以将FlatfileItemReader与Taskexecutor一起使用吗?

Flink可以和Kotlin一起使用吗?

可以将Specflow与Resharper一起使用吗?

<label>元素可以与<output>元素一起使用吗?

我可以将JavaScript JSON.parse与外部数组一起使用吗?

Typescript和Browserify可以一起使用吗?

Arr.includes(item)-我可以与多维数组一起使用吗?

`deps:[]`也可以和`useClass`一起使用吗?

可以将ThreadStart方法与“异步”一起使用吗?

Jenkins可以与python项目一起使用吗?

AppDynamics可以与Prometheus后端一起使用吗?

$ eq运算符可以和数组点符号一起使用吗?

tr可以与regex一起使用吗?

Nero InfoTool可以与Virtualbox一起使用吗?

分片可以与复制一起使用吗?

可以将MapDotNet与Leaflet一起使用吗?

可信凭证可以与SAML一起使用吗?

我可以将Materializecss与dart一起使用吗?

可以将Internet Explorer与Docker一起使用吗?

lodash zip函数可以与数组数组一起使用吗?

可以将tput与组合功能一起使用吗?

RDF 可以与 MarkLogic 中的 JSON 一起使用吗?

Android Auto 可以与 MediaBrowserService 一起使用吗?

“Like 运算符”可以与数组一起使用吗?

Svelte 可以与 ScrollMagic + GSAP 一起使用吗

我可以将指针算法与堆函数一起使用来存储数组吗?