亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

React 佈局 VS 路由器
P粉387108772
P粉387108772 2023-09-11 13:01:22
0
1
677

我對(duì)在 React 中顯示或路由元件有疑問。 我設(shè)定了一個(gè)主頁(yè)佈局,其中包含標(biāo)題、左側(cè)選單和內(nèi)容部分。我們的想法是擁有一個(gè)頁(yè)面,您只需更改主要內(nèi)容部分。 我想知道這是否是一個(gè)好方法,以及我是否必須使用路由器或僅使用鉤子來(lái)執(zhí)行此操作。

在我所做的中,我只是使用 useState 掛鉤來(lái)設(shè)定要顯示的元件,並且不需要路由器,但我想知道這是否是正確的方法。

  • 在選單上點(diǎn)選:

    setContent(<QueryIndicators />)
  • 我有一個(gè)顯示目前元件的 Content 部分:

    {content}

    const Login = () => {
      const REACT_VERSION = React.version
    
      const [collapsed, setCollapsed] = useState(true)
      const [content, setContent] = useState(<QueryIndicators />)
    
      return (
        <Layout className="layout">
          <Sider
            className="layout__sider"
            collapsible
            collapsed={collapsed}
            onCollapse={value => setCollapsed(value)}
          >
            <Menu
              mode="inline"
              defaultSelectedKeys={['1']}
              className="layout__sider-menu"
            >
              <Menu.Item
                key="1"
                icon={<HomeTwoTone twoToneColor={'#184287'} />}
                onClick={() => setContent(<QueryIndicators />)}
              >
                Home
              </Menu.Item>
              <Menu.Item
                key="2"
                icon={<PlayCircleOutlined />}
                onClick={() => setContent(<QueryExecutor />)}
              >
                Executor
              </Menu.Item >          
            </Menu>
          </Sider>
    
          <Layout>
            <Header className="layout__header">
              {React.createElement(
                collapsed ? MenuUnfoldOutlined : MenuFoldOutlined,
                {
                  className: 'trigger',
                  onClick: () => setCollapsed(!collapsed)
                }
              )}
              <h1
                className="layout__header-text"
                title={'React:' + REACT_VERSION}
              >
                POA Console HOME
              </h1>
            </Header>
            <Content className="layout__content">{content}</Content>
          </Layout>
        </Layout>
      )
    }
    
    export default Login

P粉387108772
P粉387108772

全部回覆(1)
P粉627136450

您想要如何應(yīng)用條件邏輯來(lái)基於使用者互動(dòng)顯示/渲染內(nèi)容是主觀的,但您有多種選擇。

使用本機(jī)狀態(tài)

使用本地狀態(tài)似乎沒問題,但我會(huì)警告你,在狀態(tài)中儲(chǔ)存 JSX、儲(chǔ)存一些資料(例如對(duì)元件的引用)並映射它被認(rèn)為是 React 反模式聲明你想要渲染的 JSX。

範(fàn)例:

const QUERY_CONTENT = {
  QueryExecutor,
  QueryIndicators,
}

const Login = () => {
  const REACT_VERSION = React.version;

  const [collapsed, setCollapsed] = useState(true);
  const [QueryContent, setQueryContent] = useState(QUERY_CONTENT.QueryIndicators);

  return (
    <Layout className="layout">
      <Sider
        className="layout__sider"
        collapsible
        collapsed={collapsed}
        onCollapse={value => setCollapsed(value)}
      >
        <Menu
          mode="inline"
          defaultSelectedKeys={['1']}
          className="layout__sider-menu"
        >
          <Menu.Item
            key="1"
            icon={<HomeTwoTone twoToneColor={'#184287'} />}
            onClick={() => setQueryContent(QUERY_CONTENT.QueryIndicators)}
          >
            Home
          </Menu.Item>
          <Menu.Item
            key="2"
            icon={<PlayCircleOutlined />}
            onClick={() => setQueryContent(QUERY_CONTENT.QueryExecutor)}
          >
            Executor
          </Menu.Item >          
        </Menu>
      </Sider>

      <Layout>
        <Header className="layout__header">
          {React.createElement(
            collapsed ? MenuUnfoldOutlined : MenuFoldOutlined,
            {
              className: 'trigger',
              onClick: () => setCollapsed(collapsed => !collapsed)
            }
          )}
          <h1
            className="layout__header-text"
            title={'React:' + REACT_VERSION}
          >
            POA Console HOME
          </h1>
        </Header>
        <Content className="layout__content">
          <QueryContent />
        </Content>
      </Layout>
    </Layout>
  );
};

使用路線

如果您想使用react-router 和路由來(lái)管理內(nèi)容的條件渲染,則將該元件轉(zhuǎn)換為佈局元件,該佈局元件會(huì)為嵌套渲染一個(gè)Outlet元件要渲染的路線。路由器/路由將管理路由匹配並渲染特定的路由內(nèi)容。

範(fàn)例:

import { Outlet, useNavigate } from 'react-router-dom';

const REACT_VERSION = React.version;

const AppLayout = () => {
  const navigate = useNavigate();

  const [collapsed, setCollapsed] = useState(true);

  return (
    <Layout className="layout">
      <Sider
        className="layout__sider"
        collapsible
        collapsed={collapsed}
        onCollapse={setCollapsed}
      >
        <Menu
          mode="inline"
          defaultSelectedKeys={['1']}
          className="layout__sider-menu"
        >
          <Menu.Item
            key="1"
            icon={<HomeTwoTone twoToneColor={'#184287'} />}
            onClick={() => navigate("/queryIndicators")}
          >
            Home
          </Menu.Item>
          <Menu.Item
            key="2"
            icon={<PlayCircleOutlined />}
            onClick={() => navigate("/queryExecutor")}
          >
            Executor
          </Menu.Item >          
        </Menu>
      </Sider>

      <Layout>
        <Header className="layout__header">
          {React.createElement(
            collapsed ? MenuUnfoldOutlined : MenuFoldOutlined,
            {
              className: 'trigger',
              onClick: () => setCollapsed(collapsed => !collapsed)
            }
          )}
          <h1
            className="layout__header-text"
            title={'React:' + REACT_VERSION}
          >
            POA Console HOME
          </h1>
        </Header>
        <Content className="layout__content">
          <Outlet /> // <-- nested routes render here
        </Content>
      </Layout>
    </Layout>
  );
}
import { Routes, Route } from 'react-router-dom';

const App = () => {
  ...

  return (
    ...
    <Routes>
      ...
      <Route element={<AppLayout />}>
        ...
        <Route path="/queryIndicators" element={<QueryIndicators />} />
        <Route path="/queryExecutor" element={<QueryExecutor />} />
        ...
      </Route>
      ...
    </Routes>
    ...
  );
};
import { BrowserRouter as Router } from 'react-router-dom';

...

<Router>
  <App />
</Router>
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板