【问题标题】:Not getting full array of project while creating project. It returns only name of project创建项目时未获得完整的项目数组。它只返回项目的名称
【发布时间】:2020-07-28 09:53:34
【问题描述】:

我正在制作一个表单以在 react.js/react-redux 中创建一个项目,但不知何故,在创建项目时我没有获得完整的项目数组(请参阅屏幕截图)。它只返回这样的项目名称(参考截图)。而不是项目名称,我想要项目的完整数组,包括项目名称、描述、开始日期和结束日期。

screenshot 1 screenshot 2


部分:API获取代码如下。

function project(project) {
console.log(project)
const requestOptions = {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify(project)
};
return fetch(`http://pms.infotech.com/api/project`, requestOptions).then(handleResponse);

}

部分:动作代码如下。

function project(project) {
console.log(project)
return dispatch => {
    dispatch(request(project));
    userService.project(project)
        .then(
            project => {
                dispatch(success());

                // dispatch(alertActions.success('Project added successfully!'));
            },
            error => {
                console.log(error, 'error--------------------------')
                dispatch(failure(error));
                dispatch(alertActions.error(error));
            }
        );
};

function request(project) {
    return {
        type: appConstants.PROJECT_REQUEST,
        project
    }
}

function success(project) {
    return {
        type: appConstants.PROJECT_SUCCESS,
        project
    }
}

function failure(error) {
    return {type: appConstants.PROJECT_FAILURE, error}
}

}

部分:reducer的代码如下。

import {appConstants} from '../helpers/app-components';

export function project(state = {}, action) {
switch (action.type) {
    case appConstants.PROJECT_REQUEST:
        return {addProject: true};
    case appConstants.PROJECT_SUCCESS:
        return {};
    case appConstants.PROJECT_FAILURE:
        return {};
    default:
        return state
}

}

部分:存储数据的代码如下。

import { createStore, applyMiddleware } from 'redux';
import thunkMiddleware from 'redux-thunk';
import { createLogger } from 'redux-logger';
import rootReducer from '../Reducers';

const loggerMiddleware = createLogger();

export const store = createStore(
rootReducer,
applyMiddleware(
    thunkMiddleware,
    loggerMiddleware
)

);

【问题讨论】:

  • 什么是“项目”? “项目数组”是什么意思?您的问题是 API 没有返回正确的数据吗?如果是,您需要向我们展示服务器代码。
  • 请参考截图。 “项目数组”不返回表单输入的值。 API 正在返回正确的数据,这不是问题。当我尝试提交表单时的问题,它没有返回输入字段值的完整数组。请参考截图。

标签: reactjs react-redux


【解决方案1】:

你忘记在userService.project(project).then传递项目成功:

dispatch(success(project));

修复此问题后,您必须修复减速器。

你的 reducer 只是忽略了每一个动作,并没有更新状态。
您正在正确调度操作,但您没有在减速器中获取和设置它们的有效负载,请查看您的 switch 案例,您应该从案例中返回新状态。您目前正在返回一个空对象。您在控制台中看到的是已调度的操作日志。在此处查看示例:
https://redux.js.org/basics/reducers#handling-actions

例如对于成功案例,您可以这样做以在商店中设置项目:

case appConstants.PROJECT_SUCCESS:
  return {
    ...state,
    project: payload.project,
  };

【讨论】:

  • 问题中的“here”指的是什么?
  • 嗨@KavianRabbani - 我也试过了。但我又遇到了同样的问题
  • 你能把你的 reducer 添加到问题中吗?商店里有数据集吗?
  • @KavianRabbani Reducer 代码已经存在于问题中(请检查最后一部分/块)。并回答您的第二个问题>>是的,数据集在商店中。请检查已编辑的问题。
  • 您正在正确调度操作,但您没有在减速器中获取和设置它们的有效负载,请查看您的开关案例,您应该从案例返回新状态。您目前正在返回一个空对象。您在控制台中看到的是发送的actions 日志。在此处查看示例:redux.js.org/basics/reducers#handling-actions
猜你喜欢
  • 2023-01-16
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
相关资源
最近更新 更多