Действия принимают информацию, но редуктор ничего не делает?

Я пытаюсь отправить экземпляр пользовательского ресурса в свой проект. Я заметил, что состояние не обновлялось, когда мне приходилось ждать, пока я перезапущу свой проект, чтобы увидеть новый экземпляр. В моем проекте между пользователями и ресурсами существует связь "многие ко многим" с user_resource в качестве соединения.

Хотя экземпляр размещен на моем сервере, он не будет отображаться во внешнем интерфейсе. Моя выборка POST, похоже, принимает правильные данные и даже выполняет правильное действие, но затем не может ничего обновить в редукторе. Я думаю, это может быть связано с тем, как я настроил этот конкретный случай для редуктора, хотя я не знаю, что делаю не так. Когда я использую отладчики, он попадает в действие, но не в редуктор. Я попытался создать отдельный редуктор для user_resources, но это тоже не работает.

fetch('http://localhost:3000/user_resources', {
          method: 'POST',
          headers: {
              'Content-Type': 'application/json',
              Accept: 'application/json'
          },
          body: JSON.stringify({
              resource_id: item.id,
              user_id: this.props.users.id,
              name: item.name,
              description:item.description,
              link:item.link,
          
          })
      })
          .then(res => res.json())
          .then(data2 => {
            console.log(data2)
              this.props.addUserResource(data2)
              console.log(this.props)
              debugger
           })
  }
let userInitialState = {
  id: 0,
  username: "",
  name: '',
  category: '',
  token: "",
  user_resources:[],
}

let userReducer = (state = userInitialState, action) => {
  debugger
   switch(action.type){
    case "ADD_USERS":
      let singleNestedObject = { 
        ...action.users.user, 
        token: action.users.token
      }
      return {
        ...state,
        username: action.users.user.username,
        token: action.users.token,
        id: action.users.user.id,
        name: action.users.user.name,
        category: action.users.user.category,
        user_resources: action.users.user.user_resources
      }
      case "ADD_ONE_USER_RESOURCE":
        let copyOfResources = [...state.users.user.user_resources, action.userResources]
        debugger
        console.log(...state.user_resources)
        console.log(action.userResources)
        console.log(copyOfResources)
      return {
        ...state, 
        user_resources: action.userResources
        }
      default: 
        return state
    }
  }
export const addUserResource = (resourceInfo) => {
  console.log("here")
  return {
    type: "ADD_ONE_USER_RESOURCE",
    userResources: resourceInfo
  }
}

1 ответ

Вы должны проверить инструменты redux dev, я предполагаю, что вы пишете данные не в том месте.

Вот:

let copyOfResources = [...state.users.user.user_resources, action.userResources]

ресурсы находятся в state.users.user.user_resouces но здесь:

return {
  ...state,
  user_resources: action.userResources,
};

Вы пишете ресурсы state.user_resources

Думаю нужно сделать:

return {
  ...state,
  users: {
    ...state.users,
    user: {
      ...state.users.user,
      user_resources: [
        ...state.users.user.user_resources,
        action.userResources,
      ],
    },
  },
};
Другие вопросы по тегам