【问题标题】:Redirecting from a search form to a results page in reactjs从搜索表单重定向到reactjs中的结果页面
【发布时间】:2017-08-16 08:39:51
【问题描述】:

我目前正在开发我的第一个 reactjs 应用程序,但在使用 react-router-dom 从搜索组件导航到结果组件时遇到了困难。

搜索组件接受来自用户的条目,使用 axios 执行 get 请求并更新其结果状态。

import axios from 'axios';
import React, {Component} from 'react';
import {Button} from 'react-bootstrap';
import Results from './Results';

class Search extends Component {
  constructor(props) {
    super(props);
    this.state = {
      results: [],
      term: '',
    };

    this.submit = this.submit.bind(this);
    this.changeTerm = this.changeTerm.bind(this);
  }

  changeTerm(event) {
    this.setState({term: event.target.value});
  }

  submit(event) {
    let url = 'http://api.example.com/results?q=' + encodeURI(this.state.term) + '&json=1';
    axios.get(url)
      .then(response => {
        let data = {
          results: response.data,
        };
        this.setState(data);
      })
      .catch(error => console.log(error));
  }

  render() {
    return (
      <div>
        <form onSubmit={this.submit}>
          <input onChange={this.changeTerm}/>
          <Button type="submit" bsStyle="primary">Find</Button>
        </form>
        <Results data={this.state.results}/>
      </div>
    );
  }
}

export default Search;

结果当前直接显示在搜索组件下方,但我想将结果重定向到具有不同 url 的新页面。两个页面必须不同,因为它们具有完全不同的结构和样式,并且必须指向不同的 url。

是否可以使用 react router 将搜索组件的结果转发到结果组件?我也对其他不基于 React 路由器的解决方案持开放态度。

【问题讨论】:

    标签: reactjs react-router react-router-dom


    【解决方案1】:

    您检查过Redirect 组件吗?这是一个基本想法(无需实际测试),应该可以帮助您入门。您显然必须添加更多代码才能使其正常工作。

    class Search extends Component {
      constructor(props) {
        super(props);
        this.state = {
          results: [],
          term: '',
        };
    
        this.submit = this.submit.bind(this);
        this.changeTerm = this.changeTerm.bind(this);
      }
    
      changeTerm(event) {
        this.setState({term: event.target.value});
      }
    
      submit(event) {
        let url = 'http://api.example.com/results?q=' + encodeURI(this.state.term) + '&json=1';
        axios.get(url)
          .then(response => {
            let data = {
              results: response.data,
            };
            this.setState(data);
          })
          .catch(error => console.log(error));
      }
    
      render() {
        return (
          <div>
            <form onSubmit={this.submit}>
              <input onChange={this.changeTerm}/>
              <Button type="submit" bsStyle="primary">Find</Button>
            </form>
            {this.state.results.length > 0 &&
              <Redirect to={{
                pathname: '/results',
                state: { results: this.state.results }
              }}/>
            }
          </div>
        );
      }
    }
    
    export default Search;
    

    【讨论】:

    • 感谢您的回答。我确实有一个后续问题;我可以直接访问结果组件中重定向组件中设置的状态吗?我的意思是:结果组件中的this.state.results,而不是this.props.location.state.results
    • 不。这会导致各种各样的问题。
    • 这个答案正是我想要的。能够让一切正常工作。但是,在“重定向到我的结果”页面上,什么都没有传入,正在为我的“结果”页面安慰道具和状态,但没有得到任何东西。还尝试了不同的组件生命周期方法,但没有传入任何内容。如何访问该重定向中传递的内容?
    • 看起来对象正在通过它只是嵌套在location.state 下并且没有看那里。
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2013-07-22
    • 2021-03-13
    • 1970-01-01
    • 2021-01-10
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多