React Context APIを使用して、複数のルートにまたがる状態を設定するにはどうすればよいですか?

トゥルグトクルスン

コンテキストAPIがどのように機能するかを理解しようとしています。どのクラスコンポーネントからでも更新できるグローバル状態を維持したいと思います。現在、提供されている関数を使用してコンテキストを更新しようとすると、ローカルでのみ値が更新されます。私のコードでは、フィールド「Day」を「Hello」に更新しようとしていますが、変更はWriterがレンダリングされたときにのみ表示されます。ブラウザに「Reader」をレンダリングするように要求するとすぐに、値は「Day」に戻ります。なぜこれが起こるのですか?これが私のコードです。可能な限り単純化しました。

index.js:
    import React from "react";
    import ReactDOM from "react-dom";
    import {ThemeContextProvider} from "./ThemeContext";
    
    import App from "./App";
    
    ReactDOM.render(
    <ThemeContextProvider>
       <App />
    </ThemeContextProvider>,
  document.getElementById("root")
);
app.js:
import React from "react";
import Writer from "./Writer.js";
import Reader from "./Reader.js";
import { Context } from "./ThemeContext.js";
import {BrowserRouter as Router, Switch, Route} from 'react-router-dom';

class App extends React.Component {
  static contextType = Context;
  constructor(props) {
    super(props);
  }
  render() {
    return (
      <div className="app">
        <Router>
          <Switch>
            <Route path="/writer" component={Writer}></Route>
            <Route path="/reader" component={Reader}></Route>      
          </Switch>
        </Router>
      </div>
    );
  }
}

export default App;
context.js:
import React, { Component } from "react";
const Context = React.createContext();
const { Provider, Consumer } = Context

// Note: You could also use hooks to provide state and convert this into a functional component.
class ThemeContextProvider extends Component {
  state = {
    theme: "Day"
  };

  setTheme = (newTheme) => {
    this.setState({theme: newTheme})
  };

  render() {
    return <Provider value={{theme: this.state.theme, setTheme: this.setTheme}}>{this.props.children}</Provider>;
  }
}

export { ThemeContextProvider, Consumer as ThemeContextConsumer, Context };
writer.js:
import React from "react";
import {Context} from "./ThemeContext";

class Writer extends React.Component {
  static contextType = Context
  constructor(props) {
    super(props);
    this.write = this.write.bind(this)
  }

  write () {
    this.context.setTheme("hello")
  }

  render() {
    return (
      <div>
        <button onClick={this.write}>press</button>
        <p>{this.context.theme}</p> 
      </div>
    );
  }
}

export default Writer;
reader.js:
import React from "react";
import { Context, ThemeContextConsumer } from "./ThemeContext";

class Reader extends React.Component {
  static contextType = Context;
  constructor(props) {
    super(props);
  }
  render () {
    return(
          <div>
            <p>{this.context.theme}</p>
          </div>
  );}
}

export default Reader;
ララ

別のページへの操作をどのように処理しますか?現在の場合は、検索トップブラウザの入力プレースホルダーに直接入力して手動で処理します。その後、ページが取得されてから機能しなくなりrefreshます。justcontext api使用しても、データは永続的になりません。あなたはstorageそれを永続的にするためにある種の使用を組み込む必要があります。

とにかく、ページがrefresh発生していなければ、コードは機能するはずです。別のページで表示するには、Linkreact-router-domパッケージから)または基本的にbutton次のように別のページにリダイレクトします。-

  • Writer.js componentテスト目的でこれを追加するだけです:-
import React from "react";
import { Link } from 'react-router-dom'
import {Context} from "./ThemeContext";

class Writer extends React.Component {
  static contextType = Context
  constructor(props) {
    super(props);
    this.write = this.write.bind(this)
  }

  write () {
    this.context.setTheme("hello")
  }

  render() {
    return (
      <div>
        <button onClick={this.write}>press</button>
        <p>{this.context.theme}</p> 
        <Link to="/reader">Go to Reader page</Link>
      </div>
    );
  }
}

export default Writer;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

React Contextの初期状態のTypeScriptタイプを宣言するにはどうすればよいですか?

分類Dev

Reactルートの親に状態変数を設定するにはどうすればよいですか?

分類Dev

そのコンテキストクラス内のメソッドで作成されたonClick関数を介してReact Contextの状態を渡すにはどうすればよいですか?

分類Dev

Reactで、複数の状態プロパティを使用してimg srcを設定するにはどうすればよいですか?

分類Dev

Context APIを介してReact.Componentクラスのデータをフェッチするにはどうすればよいですか?

分類Dev

Reactフックを使用してファイルオブジェクトを状態に設定するにはどうすればよいですか?

分類Dev

APIデータから初期React状態を設定するにはどうすればよいですか?

分類Dev

新しいアイテムが更新されたときに以前がデフォルトに設定されているように、REACT JSで以前に変更された状態を維持するにはどうすればよいですか?

分類Dev

それがreactにマウントされた後の要素の状態を設定するにはどうすればよいですか?

分類Dev

Reactで、プロバイダーの値が変更された後に状態を設定するにはどうすればよいですか?

分類Dev

状態が変化した後、Reactが再レンダリングされないのですが、子コンポーネントの状態を設定するにはどうすればよいですか?

分類Dev

ExpressとReactを使用してルートを設定するにはどうすればよいですか?

分類Dev

React Context:オブジェクト配列を渡してConsumerにコンテンツを表示するにはどうすればよいですか?

分類Dev

React:状態変数を使用して別のコンポーネントから関数を実行するにはどうすればよいですか?

分類Dev

React Context Helper関数が古い状態を使用するのはなぜですか?

分類Dev

React Contextの使用中に予期しないレンダリングを回避するにはどうすればよいですか?

分類Dev

Reactの監視可能な配列から新しいロケール状態を設定するにはどうすればよいですか?

分類Dev

Reactを使用した状態で複数のApolloクエリを結合するにはどうすればよいですか?

分類Dev

useMutationが完了したらReactの状態を更新するにはどうすればよいですか?

分類Dev

react-hook-formを使用してReactに無線グループの状態を保存するにはどうすればよいですか?

分類Dev

ReactでES6クラスを使用して初期状態を設定するにはどうすればよいですか?

分類Dev

Reactで深くネストされたプロパティの状態を設定するにはどうすればよいですか?

分類Dev

Reactフック:useState()を使用してネストされたオブジェクトの状態を更新するにはどうすればよいですか?

分類Dev

クラスやコンストラクターがない場合、Reactで状態を設定するにはどうすればよいですか?

分類Dev

react-routerを使用してフォームの状態をコンポーネントに保存するにはどうすればよいですか?

分類Dev

ループ内の動的チェックボックスの状態をreactで設定するにはどうすればよいですか?

分類Dev

ビデオエンドのコンポーネントの状態をreactで設定するにはどうすればよいですか?

分類Dev

React App 2つの場所で同じ関数を使用していますが、API呼び出しが異なります。毎回ルートを使用するように強制するにはどうすればよいですか?

分類Dev

同じsetstateメソッドを使用して、reactを使用して異なる変数の状態をtrue / falseに設定するにはどうすればよいですか?

Related 関連記事

  1. 1

    React Contextの初期状態のTypeScriptタイプを宣言するにはどうすればよいですか?

  2. 2

    Reactルートの親に状態変数を設定するにはどうすればよいですか?

  3. 3

    そのコンテキストクラス内のメソッドで作成されたonClick関数を介してReact Contextの状態を渡すにはどうすればよいですか?

  4. 4

    Reactで、複数の状態プロパティを使用してimg srcを設定するにはどうすればよいですか?

  5. 5

    Context APIを介してReact.Componentクラスのデータをフェッチするにはどうすればよいですか?

  6. 6

    Reactフックを使用してファイルオブジェクトを状態に設定するにはどうすればよいですか?

  7. 7

    APIデータから初期React状態を設定するにはどうすればよいですか?

  8. 8

    新しいアイテムが更新されたときに以前がデフォルトに設定されているように、REACT JSで以前に変更された状態を維持するにはどうすればよいですか?

  9. 9

    それがreactにマウントされた後の要素の状態を設定するにはどうすればよいですか?

  10. 10

    Reactで、プロバイダーの値が変更された後に状態を設定するにはどうすればよいですか?

  11. 11

    状態が変化した後、Reactが再レンダリングされないのですが、子コンポーネントの状態を設定するにはどうすればよいですか?

  12. 12

    ExpressとReactを使用してルートを設定するにはどうすればよいですか?

  13. 13

    React Context:オブジェクト配列を渡してConsumerにコンテンツを表示するにはどうすればよいですか?

  14. 14

    React:状態変数を使用して別のコンポーネントから関数を実行するにはどうすればよいですか?

  15. 15

    React Context Helper関数が古い状態を使用するのはなぜですか?

  16. 16

    React Contextの使用中に予期しないレンダリングを回避するにはどうすればよいですか?

  17. 17

    Reactの監視可能な配列から新しいロケール状態を設定するにはどうすればよいですか?

  18. 18

    Reactを使用した状態で複数のApolloクエリを結合するにはどうすればよいですか?

  19. 19

    useMutationが完了したらReactの状態を更新するにはどうすればよいですか?

  20. 20

    react-hook-formを使用してReactに無線グループの状態を保存するにはどうすればよいですか?

  21. 21

    ReactでES6クラスを使用して初期状態を設定するにはどうすればよいですか?

  22. 22

    Reactで深くネストされたプロパティの状態を設定するにはどうすればよいですか?

  23. 23

    Reactフック:useState()を使用してネストされたオブジェクトの状態を更新するにはどうすればよいですか?

  24. 24

    クラスやコンストラクターがない場合、Reactで状態を設定するにはどうすればよいですか?

  25. 25

    react-routerを使用してフォームの状態をコンポーネントに保存するにはどうすればよいですか?

  26. 26

    ループ内の動的チェックボックスの状態をreactで設定するにはどうすればよいですか?

  27. 27

    ビデオエンドのコンポーネントの状態をreactで設定するにはどうすればよいですか?

  28. 28

    React App 2つの場所で同じ関数を使用していますが、API呼び出しが異なります。毎回ルートを使用するように強制するにはどうすればよいですか?

  29. 29

    同じsetstateメソッドを使用して、reactを使用して異なる変数の状態をtrue / falseに設定するにはどうすればよいですか?

ホットタグ

アーカイブ