[React] Use the URL as the source of truth in React

Posted Answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[React] Use the URL as the source of truth in React相关的知识,希望对你有一定的参考价值。

In Single Page Apps we‘re used to fetch the data on event callbacks. That disables the capacity to use the URL to share it to someone else and get to the same state of the app, just like in non Single Page Apps.

This lesson shows you how to use React and React Router to use the URL as the source of truth for your app state.

 

Doing this in React, we can devide into three steps:

1. We can use ‘withRouter‘ HOC to get ‘location‘ props.

2. Handle refresh case: when page refresh, we want to check whether there is query string, if yes, then we need to fetch the data from the BE.

3, Hnadle query string changes case: when the query string changes, we want to use ‘componentWIllReceiveProps‘ lifecycle to get udpated query string, then fetch the data from BE.

 

import React from "react";
import { render } from "react-dom";
import { withRouter } from "react-router";
import { HashRouter, Route, Switch } from react-router-dom;
import Search from "./Search";

const styles = {
  fontFamily: "sans-serif",
  textAlign: "center"
};

// Step 1
const App = withRouter(() => (
  <div style={styles}>
    <Switch>
      <Route exact path="/" component={Search} />
    </Switch>
  </div>
));

render(
  <HashRouter>
    <App />
  </HashRouter>,
  document.getElementById("root")
);


-----------------------


import React, { Component } from "react";

const baseUrl = "https://jsonplaceholder.typicode.com/posts";

class Hello extends Component {
  state = {
    results: []
  };

  // Step 2
  componentDidMount() {
    const queryString = this.props.location.search;

    if (queryString) {
      this.fetch(queryString);
    }
  }

  // Step 3
  componentWillReceiveProps({ location }) {
    const oldQueryString = this.props.location.search;
    const queryString = location.search;

    if (oldQueryString !== queryString) {
      this.fetch(queryString);
    }
  }

  fetch = (queryString = "") => {
    fetch(`${baseUrl}${queryString}`)
      .then(res => res.json())
      .then(results => this.setState({ results }));
  };

  handleChange = ev => {
    const { value } = this.input;
    const queryString = value ? `?q=${value}` : "";
    const currentUrl = window.location.href.split("?")[0];
    window.location = `${currentUrl}${queryString}`;
  };

  render() {
    return (
      <div>
        <input ref={input => (this.input = input)} onBlur={this.handleChange} />
        <br />
        {this.state.results.map((res, i) => <p key={i}>{res.title}</p>)}
      </div>
    );
  }
}

export default Hello;

 

以上是关于[React] Use the URL as the source of truth in React的主要内容,如果未能解决你的问题,请参考以下文章

[React] Use the new React Context API

[React] Use the React Effect Hook in Function Components

python trojan development 2nd —— use python to send mail and listen to the key board then combine th

react native navigation: android app crash (java.lang.IllegalArgumentException: You need to use a Th

TF报错:Use tf.where in 2.0, which has the same broadcast rule as np.where

Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by se