javascript - React-Redux - 如何在应用程序状态内设置字段?

标签 javascript reactjs redux react-redux

我正在学习Fractal Structure使用 React 和 Redux,但当我想设置应用程序状态时,我发现被阻止了。

我会尽力解释我的问题

src/router/Counter/index.js

import { injectReducer } from '../../store/reducers'

export default (store) => ({
  path: 'counter',
  getComponent (nextState, cb) {
    require.ensure([], (require) => {
      const Counter = require('./containers/CounterContainer').default
      const reducer = require('./modules/counter').default

      /*  Add the reducer to the store on key 'counter'  */
      injectReducer(store, { key: 'counter', reducer })

      cb(null, Counter)

    }, 'counter')
  }
})

src/router/Counter/modules/counter.js

// ------------------------------------
// Constants
// ------------------------------------
export const COUNTER_INCREMENT = 'COUNTER_INCREMENT'

// ------------------------------------
// Actions
// ------------------------------------
export function increment (value = 1) {
  return {
    type: COUNTER_INCREMENT,
    payload: value
  }
}

export const actions = {
  increment
}

// ------------------------------------
// Action Handlers
// ------------------------------------
const ACTION_HANDLERS = {
  [COUNTER_INCREMENT]: (state, action) => state + action.payload
}

// ------------------------------------
// Reducer
// ------------------------------------
const initialState = 0
export default function counterReducer (state = initialState, action) {
  const handler = ACTION_HANDLERS[action.type]

  return handler ? handler(state, action) : state
}

src/routes/Counter/containers/CounterContainer.js

import { connect } from 'react-redux'
import { increment } from '../modules/counter'

import Counter from 'components/Counter'

const mapActionCreators = {
  increment: () => increment(1)
}

const mapStateToProps = (state) => ({
  counter: state.counter
})

export default connect(mapStateToProps, mapActionCreators)(Counter)

我想在计数器状态下设置更多字段,因为我可以通过分隔来传递 Prop 。即:

const mapStateToProps = (state) => ({
      max: state.counter.max
      min: state.counter.min
})

那么,如何设置state.counter中的字段呢?

谢谢。

最佳答案

您需要使用reducer来更新状态属性。你的柜台是这样的。

function counter(state = initialState, payload) {
  switch (action.type) {
    case UPDATE_COUNTER:
      return Object.assign({}, state, {
        counter: {max:payload.max,min:payload.min}
      })
    default:
      return state
  }
}

关于javascript - React-Redux - 如何在应用程序状态内设置字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38664490/

相关文章:

javascript - 通过更改 css top 在 div 动画中垂直滚动

javascript - nodeList 和参数不是实际数组是否有原因?

javascript - React-admin 自定义 noResult 设计

javascript - React Formik 不适用于数字输入

javascript - event.target.name 给出未定义

asp.net - 警报消息框问题

javascript - 当浏览器后退按钮没有达到预期效果时该怎么办

javascript - 行推送到下一个 View react 导航

javascript - 使用 react-router,redux 将无法工作

javascript - 循环到每个元素的 Array 方法