ReactJS 如何在 React 中切换页面?

2023-12-23

因此,来自 Angular/AngularJS 背景的人有状态,每个状态都是一个单独的页面。例如。在社交网络中,您可以有一个包含您的提要的状态,一个包含您的朋友列表的状态,或者一个查看个人资料的状态等。非常简单。对我来说 React 没有那么多。

假设我有一个包含 2 个页面的应用程序:产品列表和单个产品视图。在它们之间切换的最佳方式是什么?

最简单的解决方案是有一个object其中有一个州名并且是一个boolean

constructor() {
  super();

  this.state = {
    productList: true,
    productView: false
  }
}

然后在你的里面有类似的东西render()功能

return() {
  <div className="App">
    // Or you could use an if statement
    { this.state.productList && <ProductList /> }
    { this.state.productView && <ProductView product={this.state.product} /> }
  </div>
}

很简单,对吧?当然,对于 2 页的应用程序来说。

但是如果你有一个大型应用程序怎么办?10, 20, 100页数?这return()渲染的一部分会很混乱,跟踪每个状态的状态将是疯狂的。

我相信应该有更好的方式来组织您的应用程序。我尝试用谷歌搜索,但找不到任何有用的东西(除了使用if else or 条件运算符).


我建议你检查一下反应路由器 https://github.com/ReactTraining/react-router解决这种情况

它允许您轻松创建自定义路线,如下所示:

import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";

const BasicExample = () => (
  <Router>
    <div>
      <ul>
        <li>
          <Link to="/">Home</Link>
        </li>
        <li>
          <Link to="/about">About</Link>
        </li>
        <li>
          <Link to="/topics">Topics</Link>
        </li>
      </ul>

      <hr />

      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
      <Route path="/topics" component={Topics} />
    </div>
  </Router>
);

const Home = () => (
  <div>
    <h2>Home</h2>
  </div>
);

const About = () => (
  <div>
    <h2>About</h2>
  </div>
);

const Topics = ({ match }) => (
  <div>
    <h2>Topics</h2>
    <ul>
      <li>
        <Link to={`${match.url}/rendering`}>Rendering with React</Link>
      </li>
      <li>
        <Link to={`${match.url}/components`}>Components</Link>
      </li>
      <li>
        <Link to={`${match.url}/props-v-state`}>Props v. State</Link>
      </li>
    </ul>

    <Route path={`${match.url}/:topicId`} component={Topic} />
    <Route
      exact
      path={match.url}
      render={() => <h3>Please select a topic.</h3>}
    />
  </div>
);

const Topic = ({ match }) => (
  <div>
    <h3>{match.params.topicId}</h3>
  </div>
);

export default BasicExample;

对于文档和其他示例,例如嵌套路由,结账这一页 https://reactrouter.com/web/guides/quick-start.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ReactJS 如何在 React 中切换页面? 的相关文章

  • 从数组数组中获取唯一值[重复]

    这个问题在这里已经有答案了 我有以下数组 let arr email protected cdn cgi l email protection email protected cdn cgi l email protection email
  • 使用shinyjs通过javascript在闪亮的应用程序中操作现有的Leaflet地图

    我有一个闪亮的应用程序 其中包含现有的传单地图 我希望能够在渲染后使用自定义 javascript 通过shinyjs包裹 一个最小的例子如下 app R packages library dplyr library leaflet lib
  • 将字符串转换为变量名。 (JavaScript)

    我确实查看了前面的问题 但它们是针对整数值的 我需要文本值的答案 我在本周早些时候问了一个与此相关的问题 但现在是这样 如下所示 我使 Make x 等于某个字符串值 Acura Honda Toyota 当我将 Make x 传递到函数
  • 将 FBX 文件转换为 .gltf 后,模型非常小,为什么?

    问题 将 FBX 文件转换为 gltf 后 模型非常小 为什么 我尝试用以下方法缩放模型frontObject scale set 1000 1000 1000 但我收到以下错误 TypeError Cannot read property
  • 过滤器返回 true 或 false

    我正在使用过滤器在 data it 返回对象中查找 id 它返回的对象不是 true 或 false 如果我怎样才能返回 true 或 falseval recoredId valueId var hasMatch data filter
  • RequireJS 不遵循设置了 baseUrl 的 data-main 的相对路径

    使用 requireJS 我尝试为我的数据主指定一个与 baseUrl 不同的路径 看来 requireJS 会忽略我在文件名之前输入的任何内容 并始终在 baseUrl 文件夹中查找该文件 我有以下文件夹结构 index html scr
  • 为什么新行上的 return 语句不返回任何值? [复制]

    这个问题在这里已经有答案了 考虑以下情况 function func1 return hello world function func2 return hello world console log func1 console log f
  • 为什么 JSON.stringify() 接受 Date 对象?

    至少在 Firefox 中 您可以对 Date 对象进行字符串化 gt gt gt JSON stringify now new Date now 2012 04 23T18 44 05 600Z 这是有效的 因为 在 Firefox 中
  • Material UI 切换按钮 - 选择时无法更改背景颜色

    我正在尝试使用类似于单选按钮的 Material UI 切换按钮 为用户提供针对给定问题的 2 个选择 它的功能基本符合预期 但是当尝试调整选择每个切换按钮时的样式时 我无法更改切换按钮的背景颜色 我在 ToggleButton 组件上使用
  • 表单提交不起作用

    我有一张桌子 可以打印出所有可用的相机 它使用表单来更改这些设置 问题在于该表单仅更新条目中的最后一个摄像机 换句话说 如果我更改表单并为列表中的最后一个摄像机点击 应用 它将起作用 如果我更改此列表中任何其他摄像机的表单 它会将其更改为与
  • 从 UnityWebGL jslib 返回字符串

    我想使用 jslib 来获取网址参数 像这样的代码 jslib GetUrl function var s var strUrl window location search var getSearch strUrl split var g
  • ReactJS 模式无法使用 Materialise css 打开

    我是 ReactJS 的新手 正在学习使用 Materialise css 创建模型 https materializecss com https materializecss com import React Component from
  • 自动调整元素 (div) 大小以适合水平内容

    我尝试谷歌搜索 但没有得到太多结果 我正在构建一个水平轮播 它在浮动的 LI 中显示图像 我想解决的问题是 每次我向轮播添加缩略图 我是延迟加载 时 我都需要重新计算轮播的宽度 以便所有浮动缩略图很好地并排排列 其一 我宁愿不必在 JS 中
  • Niceedit本地上传图片失败

    我是这样称呼编辑的 new nicEditor buttonList bold italic underline upload iconsPath img nicedit png uploadURI http server com inte
  • Node.js - Async.js:并行执行如何工作?

    我想知道 async js 中并行执行是如何工作的 async require async async parallel function callback for var i 0 i lt 1000000000 i Do nothing
  • 如何在 Astro 中的组件之间共享状态?

    我相信我在代码中采用了错误的方法 如何在按钮单击中设置客户端首选项 该按钮单击用作全局 astro 组件中的道具 或者我应该怎么做 我知道这是可能的 因为 astro js 本身在他们的文档网站中这样做了 下面是我的尝试的解释 我目前正在开
  • 使用重复模式捕获正则表达式

    我试图捕获字符串的所有部分 但我似乎无法正确处理 该字符串具有以下结构 1 22 33 中间有运算符的数字 可以有任意数量的术语 我想要的是 1 22 33 1 22 33 但我得到 1 22 33 22 33 我尝试过各种正则表达式 这是
  • JavaScript 比较中应使用哪个等于运算符(== 与 ===)?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我在用着JSLint http en wikipedia org wiki JSLint
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示
  • 通过jquery ajax()和serialize()提交html表单

    我想通过 jquery ajax 提交此表单 这是我所做的 但它不起作用 即表单正在提交并刷新页面 但我没有看到响应 即在同一页面上打印数组 HTML

随机推荐

  • 为什么 context.clearRect() 在 requestAnimationFrame 循环中不起作用?

    我在页面上有一个画布元素 正在绘制一个圆圈并在其上移动 在循环的每次迭代中 圆都会移动一个像素 这是代码 function clearPage context clearRect 0 0 300 150 var canvasEl docum
  • 获取const方法的地址

    我希望能够形成一个只知道类本身和方法名称的成员指针类型 不幸的是 我无法在我的类中拥有 const 和非常量方法变体 示例代码片段 struct A void method void method const int main declty
  • 从 ftp 下载第二个文件失败

    我想用python从FTP下载多个文件 我的代码在我只下载 1 个文件时有效 但不适用于多个文件 import urllib urllib urlretrieve ftp ftp ncbi nlm nih gov pub pmc oa pa
  • c11 _通用添加类型

    如何向 c11 Generic Functions 添加额外类型 你是否必须 undef re define它 如果是这样 下面的工作 或者有更好的方法吗 define to str X Generic X long double ld s
  • 需要指导 ASP.Net 应用程序连接字符串

    Net 2 0 Visual Studio 2005 ASP Net Web 应用程序 我在这个网站上阅读了很多帖子和评论 但有些帖子和评论对我来说太混乱了 无法遵循 或者其他帖子和评论不符合我的要求 所以我有一个 3 层应用程序 UI B
  • 如何在 SQL Server 中设置简单的计算字段?

    我有一个包含几个帐户字段的表 如下所示 MAIN ACCT GROUP ACCT SUB ACCT 我经常需要像这样组合它们 SELECT MAIN ACCT GROUP ACCT SUB ACCT FROM ACCOUNT TABLE 我
  • 如何使用 Java 10 检测拉链炸弹

    Apache POI 定期打开 zip 文件 因为 Microsoft Excel Word 文件是较新格式的 zip 文件 为了防止某些类型的拒绝服务攻击 它具有在打开 Zip 文件时不读取大量扩展的文件的功能 因此可以通过提供一个小的恶
  • Google Cloud Storage `predefinedAcl` 和 `file.makePublic()` 不起作用

    当我从 Firebase Cloud Functions Google Cloud Functions 将文件上传到 Firebase Storage Google Cloud Storage 时 我尝试获取永久下载 URL 我尝试设置pr
  • 在 Android 上调整 GridView 中的图像大小

    我按照本教程创建了一个GridView http developer android com guide tutorials views hello gridview html 这行 imageView setLayoutParams ne
  • iOS进程内部 - 如何获取信息?

    我正在寻找一个 API 来监视在普通 iPhone 未越狱 上运行的任务 这些是关于 查找CPU使用情况 我主要关心的问题 查找内存使用情况 查找磁盘使用情况 有多少读 写 查看网络使用情况 网络发送和接收的字节数 3G Wifi GSM
  • PHP/MySQL - SQL 语法错误?

    现在当我提交角色时 当我提交单词时 我收到下面列出的以下错误 除此之外一切正常 我在用htmlentities 我仍然收到此错误 如何防止此错误发生 有没有办法可以允许 转换或停止该字符 表单显示为错误 这是我得到的错误 You have
  • 在节点中使用 apollo -(无反应)

    我想使用 apollo 进行一些批量更新 我需要从节点启动批处理脚本 例如node myscript js 我不知道该怎么做 是否有一个简单的示例可以执行入门中描述的操作 https www apollographql com docs r
  • 如何使用存储库接口在 Spring Data 中通过其嵌套对象的 objectId 查找集合?

    我在 MongoDB 中有一个集合 其中包含如下项目 id ObjectId 53e4d31d1f6b66e5163962e3c name bob nestedObject id ObjectId 53f5a623cb5e4c1ed4f6c
  • 在适用于 iOS 的 HTML5 中包含 SVG

    我想在 HTML5 网页中包含 SVG 图像 通过 JavaScript 与此 SVG 交互 并应用 CSS 样式 如果可能的话 我更愿意将 SVG 保存在单独的文件中 我希望能够离线使用该网页 因此希望推荐的任何解决方案都与此兼容 请有人
  • 使用通用键值对对字典列表列表中的值求和

    如何对字典列表列表中的重复元素求和 样本清单 data user 1 rating 0 user 2 rating 10 user 1 rating 20 user 3 rating 10 user 4 rating 4 user 2 ra
  • Android 5.1推送通知图标为空白

    当使用 Parse 进行推送通知时 我们的应用程序始终显示应用程序的启动器图标 在最新的 Android 5 1 版本中 该图标显示为空白 白色方块 我尝试在元数据中设置图标
  • 如何在 Bash 中将 `4-7` 替换为 `4,5,6,7`

    Goal 我有一根长绳子s它表示由逗号和破折号分隔的一系列数字 见下文 当多个数字彼此跟随时 将写入两个极端数字并用破折号分隔 例如 该系列4 5 6 7写成4 7 我的目标是扩展这个字符串 使所有数字都用逗号分隔 4 7应该成为4 5 6
  • C# 获取 XML 标签值

    我有一个名为BackupManager xml
  • 如何防止任务管理器中的应用程序被杀死?

    我正在开发一个家长控制应用程序 用 WPF 编写 并且希望禁止任何人 包括管理员 终止我的进程 不久前 我在网上发现了以下代码 它几乎可以完美运行 只是有时不起作用 static void SetAcl var sd new RawSecu
  • ReactJS 如何在 React 中切换页面?

    因此 来自 Angular AngularJS 背景的人有状态 每个状态都是一个单独的页面 例如 在社交网络中 您可以有一个包含您的提要的状态 一个包含您的朋友列表的状态 或者一个查看个人资料的状态等 非常简单 对我来说 React 没有那