如何将regex保存到Redux商店?
示例:
我已将regex保存在对象中:
const regexes = {
name: /^[a-zA-Z0-9_]*$/
}将此对象保存到redux存储后,regex将丢失(将其解析为空对象):
// Dispatch
dispatch(setRegexes(regexes))
// Redux Dev Tools:
{
name: {}
}Regex即使接收到作为减速机的有效载荷也可以:
// Reducer
case 'SET_REGEXES':
console.log(payload.regexes) // {name: /^[a-zA-Z0-9_]*$/}
return {...store, regexes: payload.regexes}
break;这意味着有效负载很可能是stringified到JSON,而正则表达式丢失了。
这有解决办法吗?或者,我不应该将regexes保存到redux中,即使从技术上讲,将regexes保存到JavaScript对象是有效的。
new RegExp(store.regexes.name)编辑:我正在尝试实现不需要使用的情况,我希望将实际的regex保存到存储中,因为存储是JavaScript对象。
发布于 2019-09-26 10:38:44
根据我的评论,这听起来像是一个Redux工具问题,而不是一个Redux问题。
开发工具可能会在登录到控制台之前序列化数据,但是RegExp对象本身应该正确地存储在您的状态中。
是否要在您的状态中存储不可序列化的数据,将基于您自己的上下文和需求。
根据Redux文档:
强烈建议您只将可序列化的简单对象、数组和原语放入存储区。从技术上讲,可以在存储中插入不可序列化的项,但这样做会破坏存储内容的持久化和再水合物的能力,并干扰时间迁移调试。
如果您对持久性和时间旅行调试等可能无法按预期工作的事情感到满意,那么我们完全欢迎您将不可序列化的项放入Redux存储中。最终,这是您的应用程序,以及如何实现它取决于您。与关于Redux的许多其他事情一样,只需确保您了解所涉及的权衡。
发布于 2019-09-25 11:44:14
可以首先通过RegExp的source属性将其转换为字符串。
case 'SET_REGEXES':
const regexsrc = regexes.name.source;
return {...store, regexes: {name: regexsrc}}
break;或者运行一个循环,如果regexes实际上是一个数组,则转换每个属性。
然后,只需做new RegExp(str)检索。
发布于 2019-09-25 11:50:07
只要将regex转换为字符串即可。
// Reducer
case 'SET_REGEXES':
console.log(payload.regexes) // {name: /^[a-zA-Z0-9_]*$/}
return {...store, regexes: payload.regexes.name.toString()} // Convert to string
break;
const regexp1 = /^[a-zA-Z0-9_]*$/
console.log(regexp1.toString())
https://stackoverflow.com/questions/58097404
复制相似问题