[Redux real combat] Redux combinado com React para realizar Counter

Redux combina React para implementar Counter (pode ser comparado com o artigo anterior)

Olhe para o efeito primeiro

Insira a descrição da imagem aqui


Quando você clica em +, o valor aumenta em 1

Insira a descrição da imagem aqui


Quando é clicado, o valor é reduzido em 1

Insira a descrição da imagem aqui

Quando você clica em Incrementar se ímpar, ele irá julgar se o estado na loja atual não é um número par, se não for um número par, adicione 1 a ele, caso contrário não terá efeito

O primeiro clique, sem efeito

Insira a descrição da imagem aqui
Quando for adicionado a 1, clique nele novamente e, em seguida, adicione 1.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Ao clicar em Incrementar async, ele será executado de forma assíncrona e o cronômetro será executado uma vez e adicionará 1 após um segundo.
Insira a descrição da imagem aqui

Catálogo geral de documentos

Insira a descrição da imagem aqui

Exemplo de código

package.json (arquivo de configuração)

Insira a descrição da imagem aqui

src / reducers / index.js

export default (state = 0, action) => {
    
    
  switch(action.type) {
    
    
    case 'INCREMENT':
      return state + 1
    case 'DECREMENT':
      return state - 1
    default: 
      return state
  }
}

src / components / Counter.js

import React, {
    
     Component } from 'react'
import PropTypes from 'prop-types'

class Counter extends Component {
    
    
  constructor(props) {
    
    
    super(props)
    this.incrementAsync = this.incrementAsync.bind(this);
    this.incrementIfOdd = this.incrementIfOdd.bind(this);
  }

  incrementIfOdd() {
    
    
    if(this.props.value % 2 !== 0) {
    
    
      this.props.onIncrement()
    } 
  }

  incrementAsync() {
    
    
    setTimeout(this.props.onIncrement, 1000)
  }

  render() {
    
    
    const {
    
     value, onIncrement, onDecrement } = this.props
    return (
      <p>
        Clicked: {
    
     value } times
          {
    
    ' '}
        <button onClick={
    
    onIncrement}>
            +
        </button>
          {
    
    ' '}
        <button onClick={
    
    onDecrement}>
            -
        </button>
          {
    
    ' '}
        <button onClick={
    
    this.incrementIfOdd}>
          Increment if odd
        </button>
          {
    
    ' '}
        <button onClick={
    
    this.incrementAsync}>
          Increment async
        </button>
      </p>
    )
  }
}

Counter.propTypes = {
    
    
  value: PropTypes.number.isRequired,
  onIncrement: PropTypes.func.isRequired,
  onDecrement: PropTypes.func.isRequired
}

export default Counter
Nota

Aqui, usamos prop-types para detectar o tipo de dados props

1. Por que usar prop-types

No desenvolvimento de várias pessoas, quando alguém usa um componente autodefinido, o tipo pode ser passado incorretamente. Se você adicionar prop-types ao seu componente, ele poderá verificar os adereços do componente pai. O que desejo passar no componente pai é o tipo de string '3' e um tipo numérico 3. Se não houver verificação de tipo, o sistema não fornecerá um prompt, mas após a verificação de tipo, o console apresentará um erro de transferência de tipo Dicas. Desta forma, você pode encontrar erros rapidamente no trabalho

Dois, instalação e introdução
//安装
npm install prop-types --save
//引入
import PropTypes from 'prop-types';
3. Tipos que podem ser detectados
optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol
Quatro, use isRequired para definir o atributo para o valor que deve ser passado
Counter.propTypes = {
    
    
  value: PropTypes.number.isRequired,
  onIncrement: PropTypes.func.isRequired,
  onDecrement: PropTypes.func.isRequired
}

src / index.js

import React from 'react'
import ReactDOM from 'react-dom'
import {
    
     createStore } from 'redux'
import counter from './reducers'
import Counter from './components/Counter'

const store = createStore(counter)

const rootEl = document.getElementById('root')

const render = () => ReactDOM.render(
  <Counter 
    value = {
    
    store.getState()}
    onIncrement = {
    
    () => store.dispatch({
    
     type: 'INCREMENT' })}
    onDecrement = {
    
    () => store.dispatch({
    
     type: 'DECREMENT' })}
  />,
  rootEl
)

render()

store.subscribe(render)

public / index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Redux Counter Example</title>
</head>
<body>

  <div id="root"></div>
  
</body>
</html>

Acho que você gosta

Origin blog.csdn.net/weixin_43352901/article/details/108363929
Recomendado
Clasificación