redux的简单使用

index.js

import React from 'react'

import ReactDOM from 'react-dom'

import { createStore } from 'redux'

import Counter from './Counter'

import counter from './reducers'//初始值和reducer改变state的方法



const store = createStore(counter)//传入counter,创建store

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)//监听render

reducer/index.js

export default (state = 0, action) => {//设置初始值,和reducer

  switch (action.type) {

    case 'INCREMENT':

      return state + 1

    case 'DECREMENT':

      return state - 1

    default:

      return state

  }

}

counter/index.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 = {//检验props传入值;

  value: PropTypes.number.isRequired,

  onIncrement: PropTypes.func.isRequired,

  onDecrement: PropTypes.func.isRequired

}



export default Counter

 

react-redux是一个流行的用于在React应用中管理全局状态的库。Redux是JavaScript中一个用于状态管理的工具,它通过将状态存储在单一的全局状态树中,并使用纯函数来处理状态的变化,使得状态管理变得简单而可预测。 在React中使用Redux,通常需要使用react-redux库提供的connect函数。connect函数是一个高阶组件,用于连接React组件和Redux的状态管理机制。 connect函数的基本用法是将React组件作为参数传递给connect,并在返回的函数中配置所需的状态和动作。它接受两个参数:mapStateToProps和mapDispatchToProps。 mapStateToProps是一个函数,用于从Redux的全局状态树中选择所需的状态,并作为React组件的属性传递给组件。这样,组件可以通过props访问到所需的状态,并将其渲染到页面中。 mapDispatchToProps是一个函数,用于将Redux的动作绑定到组件的props上。这样,组件可以通过调用props中的方法来触发Redux中定义的动作。 connect函数还可以接收一个可选的第三个参数,用来配置其他属性,比如在组件未连接到Redux时是否抛出警告。 使用connect函数后,就可以将Redux的状态和动作与React组件连接起来,并使其能够访问和操作全局状态。这样,组件就可以根据状态变化来更新UI,并通过触发动作来改变全局状态。 总而言之,react-redux的connect函数提供了一种简单而方便的方式来连接React组件与Redux的状态管理机制,使得在React应用中管理全局状态变得更加容易和可维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值