在 React 应用程序中更改商店的路线

2023-12-24

我有一个 React 组件,它接收用户名和密码并将其发送以进行身份​​验证。如果身份验证成功,页面应移动到呈现另一个组件的不同路由。

现在的问题是,我不知道如何更改从我的商店出发的路线?即不使用<Link>React Router 的组件?我知道我们可以使用this.props.history.push(/url)以编程方式更改路由,但它只能在 React 组件中使用<Route>,不是来自商店。

我使用 React16 和 MobX 进行状态管理,使用 ReactRouter V4 进行路由。

Store:

class Store {
    handleSubmit = (username, password) => {
        const result = validateUser(username, password);
        // if result === true, change route to '/search' to render Search component
    }
}

登录组件:

const Login = observer(({ store }) => {
    return (
        <div>
           <form onSubmit={store.handleSubmit}>
                <label htmlFor="username">User Name</label>
                <input type="text" id="username" onChange={e => store.updateUsername(e)} value={store.username} />
                <label htmlFor="password">Password</label>
                <input type="password" id="password" onChange={e => store.updatePassword(e)} value={store.password} />
                <input type="submit" value="Submit" disabled={store.disableSearch} />
            </form>}
        </div>
    )
})

主要应用程序组件:

import { Router, Route, Link } from "react-router-dom";
@observer
class App extends React.Component {
    render() {
        return (
            <Router history={history}>
                <div>
                    <Route exact path="/"
                        component={() => <Login store={store} />}
                    />

                    <Route path="/search"
                        component={() => <Search store={store} />}
                    />
                </div>
            </Router>
        )
    }
}

您可以创建history在一个单独的模块中,并将其导入到您的主应用程序组件和商店中:

// history.js
import createHistory from 'history/createBrowserHistory';

const history = createHistory();

export default history;

// Store.js
import history from './history';

class Store {
    handleSubmit = (username, password) => {
        const result = validateUser(username, password);

        if (result) {
            history.push('/search');
        }
    }
}

// App.js
import { Router, Route, Link } from "react-router-dom";
import history from './history';

@observer
class App extends React.Component {
    render() {
        return (
            <Router history={history}>
                <div>
                    <Route exact path="/"
                        component={() => <Login store={store} />}
                    />

                    <Route path="/search"
                        component={() => <Search store={store} />}
                    />
                </div>
            </Router>
        )
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 React 应用程序中更改商店的路线 的相关文章

  • 始终滚动 div 元素而不是页面本身

    我有一个带有内部的页面布局 div 包含页面上重要内容的元素 设计的重要部分是 content height 300px width 500px overflow scroll 现在 当包含的文本大于 300px 时 我需要能够滚动它 是否
  • Puppeteer 的行为与开发者控制台不同

    我正在尝试使用 Puppeteer 提取此页面的标题 https www nordstrom com s zella high waist studio pocket 7 8 leggings 5460106 https www nords
  • 如何使用 Firestore 中的对象数组更新 Field 中的特定对象? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 所以我有一个emojiCounter字段用于存储对象数组 例如 emojiCounter emoji
  • 移动浏览器上的 Javascript / jQuery 页面更改事件

    我正在设计一个移动网站 同时考虑所有领先的浏览器 Safari Chrome Dolphin Opera 我想显示一个 正在加载 元素页面导航 更改 请求新页面 我无法在锚标签上使用点击事件 因为有很多锚标签存在preventDefault
  • Google javascript 登录 api:无法离线访问

    我正在尝试为服务器端应用程序实现 Google 登录 如 Google 文档中所示 服务器端应用程序的 Google 登录 https developers google com identity sign in web server si
  • webrtc - 获取网络摄像头的宽高比

    我正在尝试学习如何开发 webRTC 应用程序 我想知道是否可以获得相机的宽高比 我不知道它是否有帮助 但我正在使用 webrtc io 但是 if更好 我可以停止使用它 From MDN https developer mozilla o
  • 无法使用 MV3 从 Firefox 下的通用脚本导出到 background.js

    我试图在服务工作者 background js 和内容脚本之间重用一些功能 https stackoverflow com questions 73421706 how to reuse a javascript function betw
  • Express.js - 监听关闭

    我有一个使用 Express 的 Node js 应用程序 在该应用程序中 我有一个如下所示的块 const app require app const port process env PORT 8080 const server app
  • 递归链接 Promise

    我正在开发一个简单的 Windows 8 应用程序 我需要在其中从网站获取一组数据 我正在使用 WinJS xhr 来检索此数据 它返回一个 Promise 然后 我将回调传递到此 Promise 的 then 方法中 该方法为我的回调提供
  • 如何将多个文件上传到Firebase?

    有没有办法将多个文件上传到 Firebase 存储 它可以在一次尝试内上传单个文件 如下所示 fileButton addEventListener change function e Get file var file e target
  • React Router 总是将我重定向到不同的 url

    我是 React 和 React Router 的新手 我正在使用 React Router v4 并遵循基于以前版本的教程 但我让它工作了 使用在 SO 上找到的一些东西和 React Router v4 文档上的一些东西 但有一件事困扰
  • 如何使用 ui-router 中的 ui-sref 将参数传递给控制器

    我需要传递和接收两个参数到我想要转换到的状态ui srefui router 的 例如使用下面的链接将状态转换为home with foo and bar参数 a Go to home state with foo and bar para
  • 如何在React中处理多个路由器

    假设我们有一个网络应用程序 它通常有很多视图 例如索引页面 管理面板 帮助页面 联系人等 我在主index js 中使用react router dom 来处理它们 它工作得很好 但是现在我在开发管理面板时遇到了问题 它是 index js
  • 输入和文本区域可以拖动吗?

    MDN 规范以及我能通过 Google 找到的每个网站都说所有 HTML 元素都可以拖动 然而 在实践中 我发现我无法拖动文本输入或文本区域 即使它们已被禁用 例如 使用以下代码 img src http www placehold it
  • 在流星收集加载时显示加载程序

    我有一个模板 task list 看起来像这样 each tasks gt task each Template task list tasks返回一个集合 在用户界面中 加载似乎需要一些时间 当集合正在加载时 我想显示一个加载指示器 关于
  • jqPlot DateAxis tickInterval 不起作用

    我试图每月绘制一个包含单个数据点的图表 我会在每个月的第一天将其作为一个点发送到 jqPlot jqplot actualChart 2011 10 01 0 296 2011 11 01 0 682 title programSelect
  • Nuxt + Vuex - 如何将 Vuex 模块分解为单独的文件?

    在 Nuxt 文档中 here https nuxtjs org guide vuex store module files 它说 您可以选择将模块文件分解为单独的文件 state js actions js mutations js an
  • 有没有办法显示嵌套在 Grid 组件内的 Material-UI 抽屉?

    我正在使用 Material UI 创建一个 Web 应用程序 主页分为 3 个网格 每个网格有一个height of 500px 我想在中间网格内显示一个带有一些操作选项的抽屉 那可能吗 到目前为止 我只能在整个屏幕上显示它 这是我的主要
  • 如何设置 .eslintrc 来识别“require”?

    我是新来的ESLint http eslint org 并且我已经成功地将 ESLint 与IntelliJ https www jetbrains com idea 开箱即用 我的 ESLint 集成无法识别node 但对文档的基本审查表
  • 了解 React Native 中的默认字体大小

    在过去的几个月里 我一直在开发一个 React Native 应用程序 但有些事情总是让我困惑 而我现在正试图弄清楚它的真相 我正在尝试标准化应用程序中的字体大小 正文 标题等 并且正在努力了解 React Native 究竟从哪里获取默认

随机推荐

  • 在 Unix 中如何找到当前日期减去 7 天?

    我正在尝试查找今天 7 天前的日期 CURRENT DT date F T diff CURRENT DT 7 echo diff 我正在尝试类似上述的方法来查找距离当前日期还少的 7 天 有人可以帮我吗 GNU date将为您计算数学 d
  • 如何使 UIView 动画过渡反向卷曲?

    我正在开发允许在某些情况下翻转界面的应用程序 应支持两种横向方向 横向左和右 设备翻转和方向更改工作正常 但是 在横向模式下 应用程序允许使用 UIViewAnimationTransitionCurlUp 效果转到另一个屏幕 然后使用 U
  • Python Tornado Websocket 连接关闭后仍然打开

    我有一个 Tornado Websocket 服务器 我想在 30 分钟不活动后超时 我用self close 30 分钟不活动后关闭连接 但似乎有些连接即使在关闭后仍保持打开状态 这是代码的基本部分 从这里获得帮助后实现 如何在 Torn
  • 作品中是否有 api order_by/sort 参数?

    如果可以在 api 查询字符串中传递 order by 和 sort 参数 那将非常有帮助 order by 应接受以下选项 距离 签到 姓名 sort 应接受以下选项 asc 描述 在将结果集缩小到返回的最大 50 个结果之前 匹配的结果
  • Spring Jndi 配置,Server.xml

    我在使用 Spring 设置 JNDI 配置时遇到问题 我检查了其他帖子 但无法解决我的问题 我使用 Tomcat 6 作为容器 根据我的理解 我需要在服务器上设置资源 所以在我的server xml文件我有这个
  • 在 R 中格式化 html 表

    我想改善外观html我使用包在 R 中生成的表xtable library xtable html table xtable
  • 日期与 ActiveSupport::TimeWithZone 的比较失败

    我有一个age方法在我的Waiver模型看起来像 def age date nil if date nil date Date today end age 0 unless date of birth nil age date year d
  • Android格式日历输出时间

    我正在使用下面的代码来设置闹钟 我想输出此时的时间 我不知道我是否以错误的方式处理这件事 如果我输出变量 cal 它会包含一长串信息 如何仅提取小时和分钟 Calendar cal Calendar getInstance add 5 mi
  • 如何在 iOS 上获取当地时间 [重复]

    这个问题在这里已经有答案了 我刚刚注意到NSDate nowDate NSDate date 给我 GMT 0 时间而不是当地时间 所以基本上在我的 iPad 上是 13 00 这段代码的输出是 12 00 如何正确获取当地时间 试一试 N
  • java 中 .length 的时间复杂度或隐藏成本

    我正在查看一个java项目并发现了一个for循环的写法如下 for int i 1 i
  • 所有类文件中的错误:R 无法解析

    示例代码 setContentView R layout main Error R cannot be resolved 所有类文件中都有这个错误 我无法摆脱它 我已经检查了 XML 文件 没有错误 我已经确保我没有意外导入 android
  • 这个 php.ini 文件到底在哪里?

    我在 yahoo 上使用 phpMyAdmin 运行 php 与 4 1 14 它说该文件位于 usr lib php php4 ini 但我在任何地方都找不到它 它在 phpMyAdmin 文件夹中吗 我真的需要尽快找到这个并关闭 mag
  • 在 Codeigniter 中添加语言的 URI 段

    我有一个网站 我需要开发支持多种语言 例如 en tr ar sp 等 但问题是 使用 Codeigniter 实现这一点的最佳方法是什么 我有一个控制器 SITE 我有很多功能 例如 酒店 城市 页面 博客 我想在此方法之前添加一个段 语
  • 识别 Kibana 和 ElasticSearch 中的时间戳

    我是 ElasticSearch 和 Kibana 的新手 无法让 Kibana 识别我的时间戳 我有一个包含大量数据的 JSON 文件 我希望使用 Curl 将其插入到 Elasticsearch 中 以下是其中一个 JSON 条目的示例
  • 使用 smo 以编程方式备份​​和还原 Azure 数据库

    我们有一个正在运行的网络应用程序 一切都托管在 azure 上 我们有一台sql server和两个数据库 生产和测试 客户请求备份生产数据库并将其恢复以代替测试数据库的功能 我正在使用以下代码 public static void Bac
  • 根据列值从数据框中随机选择行

    我有一个 pandas 数据框 如下所示 col1 col2 label a b 0 b b 0 0 1 and the value counts对于标签列 df label value counts 0 200000 1 10000 我想
  • “git push”到 github 时出错

    我在 github com 有一个公共存储库 有 2 个分支 master and test 我在本地创建了一个新目录并执行了以下操作 git clone email protected cdn cgi l email protection
  • 将刻度线与 Android SeekBar 对齐

    我正在尝试将一些刻度线指示器添加到 Android 上的 SeekBar 中 我能够生成带有刻度线的背景 但是我无法找到将刻度线与实际 SeekBar 线对齐的方法 正如您从屏幕截图中看到的 刻度线实际上在 SeekBar 行之前开始 我可
  • QTreeWidgetItem 在 python3 中不可散列

    我需要将一些 python2 代码移植到 python3 在那里我发现了一个dict of QTreeWidgetItem被建造 在 Python 2 中 这工作得很好 因为对象是可散列的 但在 python 3 中你会得到一个错误 因为
  • 在 React 应用程序中更改商店的路线

    我有一个 React 组件 它接收用户名和密码并将其发送以进行身份 验证 如果身份验证成功 页面应移动到呈现另一个组件的不同路由 现在的问题是 我不知道如何更改从我的商店出发的路线 即不使用React Router 的组件 我知道我们可以使