Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 一旦reducer更新了新的状态,有没有办法控制台记录整个状态树?_Reactjs_React Native_React Redux - Fatal编程技术网

Reactjs 一旦reducer更新了新的状态,有没有办法控制台记录整个状态树?

Reactjs 一旦reducer更新了新的状态,有没有办法控制台记录整个状态树?,reactjs,react-native,react-redux,Reactjs,React Native,React Redux,我是个新来的本地人。 我想知道一个reducer函数执行后的当前状态树。 我想知道状态树的最新值 我在dumb组件中设置了逻辑,如果loggedIn状态为true,则呈现第2页,如果为false,则呈现第1页 哑组件是否不知道更新,或者这不是安排流的正确方式 我的操作是当我初始化存储时,我发送一个操作来检查用户本地存储中是否有访问令牌。如果存在,请更新状态。。 但不知何故,国家似乎没有更新 编辑: 这是我的减速机 const initialState = { token: null,

我是个新来的本地人。 我想知道一个reducer函数执行后的当前状态树。 我想知道状态树的最新值

我在dumb组件中设置了逻辑,如果loggedIn状态为true,则呈现第2页,如果为false,则呈现第1页

哑组件是否不知道更新,或者这不是安排流的正确方式

我的操作是当我初始化存储时,我发送一个操作来检查用户本地存储中是否有访问令牌。如果存在,请更新状态。。 但不知何故,国家似乎没有更新

编辑:

这是我的减速机

const initialState = {
    token: null,
    username: null,
    loggedIn: false
}

export const reducer = (state = initialState, action) => {

    switch (action.type) {
        // Reducer does not handle API type of actions
        case types.STORE_TOKEN:
            AsyncStorage.setItem(localStorage.ACCESS_TOKEN, JSON.stringify(action.payload.token))
            return {
                token: action.payload.token,
                username : action.payload.username,
                loggedIn: true
            }
        case types.GET_TOKEN:
            AsyncStorage.getItem(localStorage.ACCESS_TOKEN).then((storage) =>{
                if(!storage){ return state }
                return {
                    token: storage,
                    loggedIn: true
                }
            })
        default:
            return state
    }
}

我建议您添加一个用于日志记录的中间件。这就是例子。如果使用,可以通过以下方式执行:

1. Install [redux-logger](https://github.com/gaearon/redux-logger) package:
(npm i --save redux-logger or yarn add redux-logger)

2. Add to file where you create store following imports:

import { createLogger } from 'redux-logger'
import { createStore, applyMiddleware } from 'redux'

3. Create your store like this:

const store = createStore(reducer, applyMiddleware(createLogger()))
完成此操作后,在控制台浏览器中,您将看到如下内容:

您可以在
createStore
功能中使用中间件,如下所示。它会对所有操作、当前状态和下一个状态进行控制台。它使用起来很简单,而且很有帮助

logger.js

import _ from 'lodash'

const DO_NOT_LOG = [
  'EFFECT_TRIGGERED', 'EFFECT_RESOLVED', 'EFFECT_REJECTED',
]

export default store => next => action => {
  if ((!_.includes(DO_NOT_LOG, action.type))) {
    console.info('Dispatching: ', action)
  }

  let result = next(action)

  if ((!_.includes(DO_NOT_LOG, action.type))) {
    console.log('Next State: ', store.getState())
  }

  return result
}
createStore
功能:

import logger from './middleware/logger'
...
const middleware = [logger]
  const store = createStore(
    reducer,
    initialState,
    compose(
      applyMiddleware(...middleware),
      autoRehydrate(),
    ),
  )

有一个函数,您可以使用它检查更新的值。它不更新。。我想我在reducer中犯了错误。我已经更新了我的reducer@MayankShukla