ReactJS HREF 导致状态丢失

2024-03-13

我有一个名为 EnrollForm 的父组件,带有一个 BrowserRouter,该组件路由到不同的子组件,这些子组件是我的整个 EnrollForm 的页面。

每次填写子组件页面并单击下一个 btn 时,所有表单字段都会保存到子组件状态 obj,然后该状态会传递到父 EnrollForm 状态。这个流程工作正常。但是,当我将代码行添加到 href 到下一个子组件时,父 EnrollForm 状态被删除,BioForm 的状态也被删除。

任何帮助将不胜感激,这可能很简单,但我已经研究了很长时间......

报名表组件:

class EnrollForm extends Component {
    state = {

    }

    setParentFormState = (newStateObj, fromComponent) => {
        this.setState({...this.state, ...newStateObj}, () => {
            console.log('Updated EnrollForm component state from ' + fromComponent);
            console.log(this.state);
        });
    }

    render() {
        return (
            <Router>
                <div className='workflow'>
                    <Route path='/enrollment-form/bio' render={(routeProps)=>(<BioForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                    <Route path='/enrollment-form/citizenship' render={(routeProps)=>(<CitizenshipForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                    <Route path='/enrollment-form/identity' render={(routeProps)=>(<IdentityForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                    <Route path='/enrollment-form/attributes' render={(routeProps)=>(<AttributesForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                    <Route path='/enrollment-form/address' render={(routeProps)=>(<AddressForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                    <Route path='/enrollment-form/eligibility' render={(routeProps)=>(<EligibilityForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                    <Route path='/enrollment-form/documents' render={(routeProps)=>(<DocumentsForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                    <Route path='/enrollment-form/location' render={(routeProps)=>(<LocationForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                    <Route path='/enrollment-form/appointment' render={(routeProps)=>(<ApptTimeForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                    <Route path='/enrollment-form/status' render={(routeProps)=>(<StatusForm {...routeProps} setParentFormState={this.setParentFormState}/>)}/>
                </div>
            </Router>
        );
    }
}

export default EnrollForm;

生物形态成分:

class BioForm extends Component {
    state = {
        first_name: null,
        middle_name: null,
        last_name: null,
        u_suffix: null,
        u_gender: null,
        u_dob: null,
        u_lang: null,
        u_email: null,
        u_country_code_1: null,
        u_country_code_2: null,
        u_phone_1: null,
        u_phone_2: null,
        u_contact_method: null

    }

    nextButtonClicked = event => {
        let form = document.getElementById('applicant-form');
        let formDataJsObj = FormFunctions.getJsObjFromFormData(form);
        let keyToDelete = 'u_email[verify]';
        //This field is removed from the form data object because it is not sent in the POST request
        FormFunctions.removeKeyFromFormObj(formDataJsObj, keyToDelete);
        console.log(formDataJsObj);
        this.setState(formDataJsObj, () => {
            this.props.setParentFormState(this.state, this.constructor.name);
            console.log('BioForm data submitted and parent state updated.. changing pages.');
            window.location.href = '/enrollment-form/citizenship';
        });



    }
    render(){//markup}
}

这会导致页面重新加载,从而重置您的所有状态(包括 Redux)并再次渲染所有内容:

window.location.href = '/enrollment-form/citizenship';

将其替换为:

this.props.history.push('/enrollment-form/citizenship')

请注意,您可能需要用以下内容包装您的组件带路由器像这样:

export default withRouter(EnrollForm);

随着导入:

import { withRouter } from "react-router";

希望能帮助到你。快乐编码!

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

ReactJS HREF 导致状态丢失 的相关文章

随机推荐

  • 如何用c++语言中的tensorflow.so和c_api.h加载图?

    我找不到任何有关如何加载图表的示例tensorflow so and c api h在C 中 我读了c api h 但是 那ReadBinaryProto功能不在其中 如何在没有ReadBinaryProto功能 如果您使用 C 您可能需要
  • 为派生类专门化 std::hash 在 gcc 中有效,而不是 clang

    我正在努力专攻std hash对于派生类 迄今为止最好的方法是基于这个答案 https stackoverflow com a 31213703 620382 include
  • scala ArrayBuffer 删除带有谓词的所有元素

    Scala 在过滤不可变序列方面非常优雅 var l List 1 2 3 4 5 6 l l filter 2 1 但是如何使用像 ArrayBuffer 这样的可变集合来做到这一点呢 我发现的只是删除单个元素或切片 或者从另一个序列中删
  • 如何在弹出菜单中使用单选按钮?

    我正在尝试创建一个包含可选单选按钮的弹出菜单 以便更改视图类型 例如图库 卡片 滑动 网格 列表等 我遇到的问题是 PopupMenu 有自己的用于选择值的回调 Radio 和 RadioListTile 也是如此 忽略RadioListT
  • 自动将调试器附加到 Eclipse 中的新 Java 子进程

    我有一个 Java 进程 它使用 ProcessBuilder 等生成一个新的 JVM 在调试时 是否可以让 Eclipse 将调试器附加到新的子进程 更好的是 是否有任何插件在注意到新的子进程时会自动执行此操作 我被告知 虽然还没见过 V
  • 哈希表真的可以是 O(1) 吗?

    哈希表可以实现 O 1 似乎是常识 但这对我来说从来没有意义 有人可以解释一下吗 我想到了以下两种情况 A 该值是一个小于哈希表大小的 int 因此 该值是它自己的哈希值 因此不存在哈希表 但即使有 也会是 O 1 并且效率仍然很低 B 您
  • 在 Podfile 中声明架构

    有没有办法将架构包含在 CocoaPods 中Podfile 我正在尝试为 32 位和 64 位构建我的应用程序 但是当我切换到Standard architectures including 64 bit 在我的项目的构建设置中 它抱怨我
  • css:覆盖活动链接样式?

    我的 css 中有以下选择器 a active position relative top 1px 因此 每个链接在按下时都会有这个小按钮效果 我怎样才能防止特定链接的这种行为 例如我的网站上有一个 返回顶部 链接 不应该有这种行为 a b
  • 标准 Treeview 的 C# 替代品?

    我想找到提供的 System Windows Form Treeview 的替代品 我需要以下改进 多项选择项目 更好的性能 标准小部件的性能简直太糟糕了 特别是在添加一长串项目时 在树视图小部件内拖放项目时滚动 我可能会忘记一些 但这些非
  • s3 安装在容器内。如何将其暴露给主机?

    我一直在考虑是否有一个容器可以安装 s3 桶并将其暴露在外面 I used https github com FindHotel aws s3 mount https github com FindHotel aws s3 mount将 s
  • 拖放文本视图

    我必须拖动 但无法完美拖动它 问题是 1 我必须拖动两到三次才能将其带到所需的位置 因此 textview 不能顺利跟随手指移动 2 如果我向上移动文本视图 它只会向下移动 我提供了触摸事件上textview的代码 请帮忙 提前致谢 fin
  • 如何使用 Unix 套接字对来通信 Rust 和 Ruby 进程

    我正在尝试使用 Unix 套接字对将 Rust 进程与 Ruby 子进程进行通信 我只使用 Ruby 尝试过同样的操作 它可以工作 但我似乎无法让它与 Rust 一起工作 我尝试将 rust socket 文件描述符传递给Ruby脚本 将
  • python 中的聚合时间序列

    我们如何按小时或分钟粒度聚合时间序列 如果我有如下所示的时间序列 那么我希望这些值按小时聚合 pandas 是否支持它 或者是否有一种在 python 中实现它的好方法 timestamp value 2012 04 30T22 25 31
  • 应用内购买产品 ID 是否必须以反向 DNS 开头?

    应用内购买产品 ID 是否必须以反向 DNS 开头 例如com mycompany My Awesome Game Level Pack 1或者它可以只是独立的吗Level Pack 1 产品 ID 可以是您想要的任何内容 但建议您遵循反向
  • 使用 rma.glmm 计算估计值:当 2 个估计值相同时出错

    我正在使用 rma glmm 来计算两项不同研究的元比例 例如 6 个月时出现 xi 和未出现 xii 不良事件的个体比例 library metafor 6 months study c 1 2 ni c 41 19 xi c 26 14
  • 浏览器后退按钮未更新页面

    我使用 jquery 单击事件在井号标记后设置 URL URL 设置正确 但当我使用浏览器后退按钮时 它不会将我带到上一页 在我的点击事件之前 URL 如下所示 http example com menu php home 我的点击事件如下
  • 如何使用 JavaZOOM JLayer 库播放/暂停 mp3 文件?

    如何向以下代码添加播放 暂停按钮 import javazoom jl player Player try FileInputStream fis new FileInputStream mysong mp3 Player playMP3
  • 更新至 Safari 12.0 - Java 插件不再列出

    更新到后Safari 版本 12 0 下面的Java插件Safari gt 首选项 gt 网站 gt 插件不再列出 因此 Java Applet 不能在不安全模式下运行 有没有办法启用 Java 插件或运行 Java 小程序 在 macOS
  • Pandas:条件组特定计算

    假设我有一个带有键 例如客户 ID 和两个数字列 C1 和 C2 的表 我想按键 客户 对行进行分组 并在其列上运行一些聚合器 例如 sum 和 Mean 在计算组聚合器之后 我想将结果分配回 DataFrame 中的每个客户行 因为一些客
  • ReactJS HREF 导致状态丢失

    我有一个名为 EnrollForm 的父组件 带有一个 BrowserRouter 该组件路由到不同的子组件 这些子组件是我的整个 EnrollForm 的页面 每次填写子组件页面并单击下一个 btn 时 所有表单字段都会保存到子组件状态