为了账号安全,请及时绑定邮箱和手机立即绑定

从 localStorage 存储和提取 JSX 元素

从 localStorage 存储和提取 JSX 元素

四季花海 2022-06-09 19:31:42
在我的 React 应用程序中,我在 localStorage 中存储了一个 javascript 对象。此对象表示应用程序中使用的主题。问题是这个对象的组件之一是一个JSX元素:{  ...  icon: <Logo />,  ...}然后我在我的应用程序中使用这个对象:render() {  return (    <>      {theme.icon}    </>  )}现在的问题是,当我将这个对象保存在 localStorage using 中JSON.stringify()时,JSX 对象已“损坏”,并且在 using 之后不再被视为 React 对象JSON.parse()。如果我查看 localStorage,icon元素的存储方式如下:{key: null, ref: null, props: {width: "154", height: "79", viewBox: "0 0 154 79"}, _owner: null,…}那么你知道我可以存储、提取然后使用来自 localStorage 的 JSX 元素吗?
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

为什么不将图标值更改为引用您想要的图标类型的字符串。


例子:


存储在 localStorage 中的对象:


{

  ...

  icon: "logo",

  ...

}

并在您的代码中创建一个条件:


render() {

  return (

    <>

      {theme.icon === 'logo'? <Logo /> : null}

    </>

  )

}

或制作一个 Icon 通用组件,将图标类型作为道具并呈现正确的:


render() {

  return (

    <Icon type={theme.icon}/>

  );

}


查看完整回答
反对 回复 2022-06-09
?
ibeautiful

TA贡献1993条经验 获得超5个赞

您不应该将 react 组件引用存储在字符串中,并且 JSON.stringify 无法正确序列化它们(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)。


我建议您将组件替换为它的名称(或某个键),然后您将使用它来呈现适当的组件:


{

  ...

  icon: 'Logo', // then render the appropriate component based on this

  ...

}


查看完整回答
反对 回复 2022-06-09
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信