【发布时间】:2021-02-12 19:26:17
【问题描述】:
您好,我正在尝试使用带有两个组件的侧边栏实现类似于 Google Keep 的应用
- TagList(用于显示 Notes 的标签名称)
- ColorList(用于显示音符颜色)
如上图。有以下路线
如果选择了全部(无论是在标签还是颜色部分)=没有路由参数
示例路线
/(标签 = 全部,颜色 = 全部)
/tag/:tag(标签 = :tag,颜色 = 全部)
/color/:color(标签 = 全部,颜色 = :color)
/tag/:tag/color/:color(标签 = :tag ,颜色 = :color )
我使用了如下组件结构
<NoteContextProvider value={this.state}>
<Topbar />
<Sidebar />
<Content>
<NoteList/>
</Content>
</NoteContextProvider>
使用以下状态形状。
tagsLoaded: false,
tags: [],
selectedTag: { id: 0, text: "All" },
setSelectedTag: (tag) => {
this.setState({ selectedTag: { ...tag } });
},
colorsLoaded: false,
colors: [],
selectedColor: { id: 0, display: "Default", code: "" },
setSelectedColor: (color) => {
this.setState({ selectedColor: { ...color } });
}
我使用 Context API 将这些状态传递给所有组件。
我从侧边栏适当地调用 setSelectedTag 或 setSelectedColor。在我尝试引入上述 URL 路由之前,它工作正常。
我还想将用户重定向到 All,以防 url 中给出无效的标记/颜色。
任何人都可以提出一个干净的方法来实现同样的目标吗?
【问题讨论】:
-
您是否检查了 google keep 的实施?检查带有多个标签的不同标签的网址。我认为谷歌为此使用查询参数。
-
@KirillSkomarovskiy 没有 Google Keep 正在使用路由参数而不是查询参数..
标签: reactjs