react--列表携带搜索条件到详情,详情回到列表要回显之前的搜索条件,然后刷新后搜索条件重置初始状态

操作:

(1):在接诊记录列表页有搜索条件如姓名手机号,接诊时间和接诊类型。

(2):输入搜索查询条件后,点击进去详情页。

(3):在详情页点击返回列表按钮。

要求:

在列表页还回显跳转详情页时的搜索条件,且刷新页面后搜索条件重置为初始状态。

页面展示:

(1)列表页面初始状态。

(2):增加搜索条件点击查询--点击详情。

(3):在详情页点击返回按钮,回到详情页。

(4):返回页面,搜索条件回显。

核心代码:

1:详情页跳转,查询条件放在路由location的state里面。

  // 跳转到详情方法
  JumpToDetail = (record) => {
    const { form } = this.props;
    const formValue = form.getFieldsValue(['accept_date', 'input_data', 'accept_type']); // form表单获取搜索字段
    hashHistory.push({
      pathname: `/reception/detail/${record.trea_id}/${record.visi_id}`,
      state: formValue
    });
  }

2点击详情页返回按钮:

  // 返回列表页
  handleBackToDetail = (e) => {
    const { location: { state } } = this.props;
    hashHistory.push({
      pathname: 'reception/main', // 列表页地址
      state, // 列表页的state再带回去
    });
  }

3:列表页设置搜索条件值和刷新页面的处理

  componentDidMount() {
    const { location: { state = {} }, form } = this.props;
    const { accept_date, ...rest } = state;
    let accept_start_date = null;
    let accept_end_date = null;
    if (accept_date) {
      accept_start_date = moment(accept_date[0]);
      accept_end_date = moment(accept_date[1]);
    } else {
      accept_start_date = moment();
      accept_end_date = moment();
    }
    rest.accept_date = [accept_start_date, accept_end_date];
    // 即将离开当前页面(刷新或关闭)时触发,路由跳转不触发该方法
    window.onbeforeunload = () => {
      // 清除localtion的state,是会被自动存在sessionStorage里面的,找到相应的props.location.key,移除相应的数据
      sessionStorage.removeItem(`@@History/${this.props.location.key}`);
    };
    // 表单设置用户之前的搜索条件
    form.setFieldsValue({ ...rest });
    // 请求数据
    this.handleSearchList();
  }

4:组件卸载移除onbeforeunload方法:

  componentWillUnmount() {
    window.onbeforeunload = null;
  }

然后去测试了下,完全可行。

备注:hash路由跳转页面是不会重载的,但是组件会加载,不要把组件加载和页面重载搞混淆。