当前位置: 首页 > 知识库问答 >
问题:

如何同步Redux状态和url哈希标记参数

司马璞
2023-03-14

我们有一个讲座和章节的列表,用户可以在其中选择和取消选择它们。这两个列表存储在redux存储中。现在,我们希望在url的哈希标记中保留所选讲座段塞和章节段塞的表示,对url的任何更改也应该更改存储(双向同步)。

什么是最好的解决方案,使用反应路由器或甚至反应路由器redux?

我们真的找不到一些好的例子,其中react路由器只用于维护url的哈希标记,并且只更新一个组件。

共有2个答案

吴镜
2023-03-14

react-router-redux可以帮助你注入url的东西来存储,所以每次hash标签改变,存储也。

凌钊
2023-03-14

我想你不需要
(很抱歉回答得不屑一顾,但这是我经验中最好的解决方案。)

存储是数据的真实来源。这很好
如果您使用React路由器,请让它成为您URL状态的真实来源<你不必把所有东西都放在店里。

例如,考虑您的用例:

因为url参数只包含讲座和所选章节的段段。在商店里,我有一个讲座和章节的列表,其中包含名称、段塞和选定的布尔值。

问题是你在复制数据。存储区中的数据(章节。所选)在React路由器状态下重复。一种解决方案是同步它们,但这很快就会变得复杂。为什么不让它成为选定章节的真相来源?

然后,您的商店状态将如下所示(简化):

{
  // Might be paginated, kept inside a "book", etc:
  visibleChapterSlugs: ['intro', 'wow', 'ending'],

  // A simple ID dictionary:
  chaptersBySlug: {
    'intro': {
      slug: 'intro',
      title: 'Introduction'
    },
    'wow': {
      slug: 'wow',
      title: 'All the things'
    },
    'ending': {
      slug: 'ending',
      title: 'The End!'
    }
  }
}

就这样!不要将所选的存储在那里。相反,让路由器来处理它。在路由处理程序中,编写如下内容

function ChapterList({ chapters }) {
  return (
    <div>
      {chapters.map(chapter => <Chapter chapter={chapter} key={chapter.slug} />)}
    </div>
  )
}

const mapStateToProps = (state, ownProps) => {
  // Use props injected by React Router:
  const selectedSlugs = ownProps.params.selectedSlugs.split(';')

  // Use both state and this information to generate final props:
  const chapters = state.visibleChapterSlugs.map(slug => {
    return Object.assign({
      isSelected: selectedSlugs.indexOf(slug) > -1,
    }, state.chaptersBySlug[slug])
  })

  return { chapters }
}

export default connect(mapStateToProps)(ChapterList)

 类似资料:
  • 问题内容: 我们提供了讲座和章节的列表,用户可以在其中选择和取消选择它们。这两个列表存储在redux存储中。现在,我们希望在url的hash标签中保留选定的演讲段和章节段的表示形式,并且对该URL所做的任何更改也应更改存储(双向同步)。 使用react-router甚至react-router- redux 的最佳解决方案是什么? 我们找不到真正的好例子,其中react路由器仅用于维护url的ha

  • 我有一个带有搜索面板的网页。搜索面板有几个输入字段:id, size,... 我想要的是当用户设置搜索值(例如:id=123和size=45)并按下搜索按钮时: Redux reducer中的searchState应更新为新的搜索值(id=123,size=45) URL应更改为“http://mydomain/home?id=123 另一方面,如果用户将URL更改为超文本传输协议://myDom

  • 我现在正在学习Redux和React,我正在写一个像这样的爱好项目。 该项目是一个使用标记进行搜索的搜索服务。用户可以在UI中添加或删除标记。在代码中,标记以Redux状态表示,添加和删除标记通过单独的操作进行。到目前为止还不错,我有一个玩具代码可以使用。 现在我想用哈希之后的URL部分“绑定”标签;例如,序列化标记,用破折号分隔;这样用户就可以复制/粘贴URL并拥有相同的标记。 我找不到如何轻易

  • 我想知道我是否正确理解了React或React Native中的Redux-thunk异步操作模式,以及我们如何对操作状态进行用户反馈。 我觉得要么我不明白这个模式,要么这个谜题还有其他部分。 所以,在我的 React 原生应用程序中(但它也可能适用于 React),我想调用一个更新 REST 调用,这将返回一个promise。如果成功或失败,我想向用户显示相应的消息。 没有Redux-async

  • 问题内容: 我正在尝试从Foursquare解析URL如下所示的access_token: https://mywebsite.com/4sqredirect/#access_token=1234567890XXXXX 我试过$ routeParams和$ location,什么也没有返回。只有在尝试$ route之后,我才获得了带有以下属性的对象: 这是否意味着无法使用本机AngularJS函数

  • 本文向大家介绍Java中并发哈希映射和同步哈希映射之间的区别,包括了Java中并发哈希映射和同步哈希映射之间的区别的使用技巧和注意事项,需要的朋友参考一下 并发Hashmap是jdk1.5中引入的类。并发哈希映射仅在添加或更新映射时在称为片段的存储桶级别应用锁。因此,并发哈希映射允许对映射进行并发读写操作。  同步hashmap(Collection.syncronizedHashMap())是C