Maison > interface Web > js tutoriel > Utiliser les opérations brutes React-Redux

Utiliser les opérations brutes React-Redux

php中世界最好的语言
Libérer: 2018-06-09 11:56:41
original
1288 Les gens l'ont consulté

Cette fois, je vous présente quelles sont les précautions d'utilisation de l'opération brute React-Redux. Ce qui suit est un cas pratique, jetons un coup d'œil.

Implémenter un React-Redux par moi-même

J'ai déjà essayé d'implémenter un Redux par moi-même. Ce blog enregistre principalement le processus d'implémentation d'un React-Redux par moi-même. .

Ce React-Redux présente encore quelques défauts mineurs. Je l'ai implémenté en utilisant un compteur comme exemple.

Voici la structure des répertoires :

Le fichier connect.js ici est React-redux.

├─component
│   connect.js
│   counter.js
│
└─store
    index.js
Copier après la connexion

index.js :

import React from "react";
import ReactDom,{render} from "react-dom";
import Couter from "./component/counter";
import {Provider} from "./component/connect" import store from "./store/index"  ReactDom.render(<Provider store={store}><Couter/></Provider>,document.getElementById("root"));
Copier après la connexion

./store/index.js :

import {createStore} from "redux";
function reducer(state={number:0},action) {
  switch (action.type){
    case "add":
      return {number:state.number+action.count}
    default:
      return state;
  }
}
export default createStore(reducer);
Copier après la connexion

./component/connect.js :

import React from "react";
import PropTypes from "prop-types";
//Provider是一个组件 接受一个store属性 将其内容挂载在上下文context //这样后代才可以都有办法拿到 class Provider extends React.Component{
  static childContextTypes={
    //设置上下文的类型是对象
 store:PropTypes.object
 }
  getChildContext(){
    //获取并设置后代上下文的内容
 return {store:this.props.store}
  }
  render(){
    return this.props.children
 }
}
let connect=(mapStateToProps,mapDispatchToProps)=>(comp)=>{
  return class Proxy extends React.Component{
    static contextTypes={
      store:PropTypes.object
 }
    constructor(props,context){
      super(props);
      //将参数mapStateToProps 的解构赋值 代理组件的状态
 this.setState=mapStateToProps(context.store.getState())
    }
    componentDidMount(){
      this.context.store.subscribe(()=>{
        this.setState(mapStateToProps(this.context.store.getState()))
      })
    }
    render(){
      return <comp {...this.state} {...mapDispatchToProps(this.context.store.dispatch)}/>
    }
  }
}
export {Provider,connect}
Copier après la connexion

./component/counter.js :

import React from "react";
import {connect} from "./connect";
export default class Counter extends React.Component{
  constructor(props){
    super(props);
  }
  render(){
    return (
      <p>
        <button onClick={()=>{
          this.props.add(5);
        }}>+</button>
        {this.props.n}
      </p>
    )
  }
}
let mapStateToProps=(state)=>{
  return {n:state.number}
};
let mapDispatchToProps=(dispatch)=>{
  return {
    add:(count)=>{
      dispatch({type:"add",count:count})
    }
  }
}
export default connect(mapStateToProps,mapDispatchToProps)(Counter)
Copier après la connexion

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes. sur le site PHP chinois !

Lecture recommandée :

Explication détaillée des étapes pour importer et utiliser les composants vue-cli

Comment obtenir WeChat autorisation et connectez-vous à vue

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal