使用React + Redux从数据库设置initialState值

时间:2019-10-16 13:14:16

标签: reactjs laravel redux state

我试图以redux形式设置输入值,但发现我的状态没有用户值。只是默认插入的内容:

import { Map, fromJS } from 'immutable';
import { INIT } from '../../actions/actionConstants';

const initialState = {
  usersLogin: Map(
      {
    id: '',
    name : 'test',
    email: 'test01@gmail.com',
    password: 'test',
    remember: true
  }

  )
};
const initialImmutableState = fromJS(initialState);
export default function reducer(state = initialImmutableState, action = {}) {
  switch (action.type) {
    case INIT:
      return state;
    default:
      return state;
  }
}

我如何获取const数据库中的所有用户值?

2 个答案:

答案 0 :(得分:1)

与其他方法相同,但是如果实现为代码段,则需要使其同步。

FWIW,我几乎总是使数据库状态加载异步,因为数据库调用可能失败。我总是有一个硬编码的后备,然后在完成DB(或API / etc)异步调用后设置状态。

此外,总的来说,我在商店中经常存储“应用程序用户”类的东西,因为几乎所有地方都需要它,例如登录/等。我设置了它,并在几乎始终可用的任何地方都需要它,但是在异步失败的情况下,总是需要回退。

(不相关,但是没有理由在这种情况下单独案例...呃...案例。)

答案 1 :(得分:1)

您需要在这里做几件事

1-您需要编写一个动作创建者来为您执行此API提取,然后使用API​​响应(例如SET_DB_VALUES

)分派一个动作

2-然后,您需要分派此操作,您可以在Redux根元素(由Provider包装并接收存储的元素)的componentDidMount中进行操作

3-更改您的减速器以听类似的动作

switch (action.type) {
case INIT:
  return state;
case SET_DB_VALUES:
  return {
     ...state,
     action.payload
  }
default:
  return state;

}

注意:如果您可能想使用某些中间件在动作创建者中进行异步调用,则可以使用Thunk,

希望它可以帮助您开始