javascript - 如何解决 react Material 菜单中的重定向问题

标签 javascript reactjs material-ui

使用我的菜单时,我遇到了不同的问题。

对于初学者来说,在第一个 RETURN 中,我有一个带有 LISTITEM 和 LISTITETEXT 的 TREEITEM。

我在 LISTITETEXT 中放置了一个 OnClick,以便如果我的菜单 id 等于我授权重定向的值。

但是,重定向会重新加载页面,这不是我使用 React 时菜单的目的。

第二,我有另一个 RETURN,其中包含我的子菜单。

它显示正确,当我点击TREEITEM时,我被重定向到正确的页面。

但是,我在控制台中遇到错误:

Warning: You tried to redirect to the same route you're currently on: "/extranetV1/prospect"

{stoMenu && (
                <TreeView
                  style={layout.menu}
                  defaultCollapseIcon={<ArrowDropDownIcon />}
                  defaultExpandIcon={<ArrowRightIcon />}
                >
                  {stoMenu.root.children.map(menu => {
                    return (
                      <TreeItem
                        key={menu.nodeId}
                        nodeId={menu.nodeId}
                        label={
                          <ListItem style={layout.menuListItem} className={menu.iconCls}>
                            <ListItemText style={layout.menuText} primary={menu.text} onClick={() => {
                              if (menu.id === '/accueil') {
                                window.location.assign(menu.id);
                              }
                            }} />
                          </ListItem>
                        }
                      >
                        {menu.children.map(child => {
                          return (
                            <TreeItem
                              key={child.nodeId}
                              nodeId={child.nodeId}
                              label={child.text}
                            >
                                  <Redirect to={child.id}/>
                            </TreeItem>
                          );
                        })}
                      </TreeItem>
                    );
                  })}
                </TreeView>
              )}

最佳答案

对于这两种情况,您使用重定向的 react 都是错误的。

您需要使用react router对于 React 应用程序内的重定向,而不是 window.location.assign(menu.id) 它将是 props.history.push(menu.id)

我在第二个中看到你使用 Redirect成分。问题是您每次在循环中都会触发重定向。您应该设置一些状态,并在代码的前面使用条件触发渲染。

const MyComponent = (props) => {
  const [state, setState] = useState({ pathToRedirect: null });

  const handleRedirect = (to) => {
    setState({ pathToRedirect: to});
  }

  render () {
     if (state.pathToRedirect) {
       return <Redirect to={state.pathToRedirect} />;
     }
     //render list with handleRedirect onClick
     return (...);
}

关于javascript - 如何解决 react Material 菜单中的重定向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58024177/

相关文章:

javascript - 一个模块内的两个 Controller 不工作

javascript - :focus on multiple buttons 的替代解决方案

reactjs - Redux 待办事项列表高级

reactjs - 错误 : Cannot find module 'react-dev-utils/getPublicUrlOrPath'

css - 如何向 Material UI Chip 背景添加线性渐变颜色?

Javascript XMLHttpRequest "NetworkError"

javascript - 使用语义网格系统的局限性?

node.js - 使用 --生产选项和对等依赖项进行 npm install

javascript - 动态导入 React Material UI 图标

reactjs - 如何在 React 自定义元素中为 MUI Material v5 创建插入点以在 shadow dom 中挂载样式