【问题标题】:Add dynamically object variable in existing state in reactjs (Using functional components)在 reactjs 中以现有状态动态添加对象变量(使用功能组件)
【发布时间】:2019-04-22 11:29:38
【问题描述】:

我是 reactjs 的新手并正在创建小项目,我使用的是功能组件而不是类组件,并使用 store 来表示状态。我添加了一些状态变量,并想添加处于退出状态的对象数组,我试过但它不起作用。以下是我设置状态的商店文件:

export const initialState = {
  validationTally: 0,
  token: '',
  multiForm : []
  }

  // action types
const SET_VALIDATION_TALLY = 'SET_VALIDATION_TALLY';
const SET_TOKEN = 'SET_TOKEN';
const SET_MULTIFORM = 'SET_MULTIFORM';

export const reducer = (state, action) => {
    switch (action.type) {
        case SET_VALIDATION_TALLY:
          return {
            ...state,
            validationTally: state.validationTally + 1
          };
        case SET_TOKEN:
          return {
            ...state,
            token: action.payload
          };
        case SET_MULTIFORM:
          return {
            ...state,
            multiForm: action.payload
        };
    }
}

export const setValidationTally = () => ({
  type: SET_VALIDATION_TALLY
});

export const setToken = payload => ({
  type: SET_TOKEN,
  payload
});

export const setMultiForm = payload => ({
  type: SET_MULTIFORM,
  payload
});

我想在状态变量“multiForm”中动态添加对象,当有人输入值 2 时,我想在“multiForm”中添加两个对象,如下所示

export const initialState = {
  validationTally: 0,
  app: '',
  token: '',
  multiForm : [{
    firstName : '',   
    lastName :''
  },
  {
    firstName : '',   
    lastName :''
  }]
  }

【问题讨论】:

    标签: reactjs react-hooks react-state


    【解决方案1】:

    假设action.payload for SET_MULTIFORM action 包含要添加的字段数,您可以简单地映射数组项并添加到现有字段中

    case SET_MULTIFORM:
          return {
            ...state,
            multiForm: [...state.multiForm, ...Array.from({ length: action.payload }).map(() => ({firstName: '', lastName: ''}))]
        };
    

    【讨论】:

    • 感谢@Shubham 代码有效,但在返回大括号内无效,它的工作方式类似于这种情况 SET_MULTIFORM: [...state.multiForm] = []; [...state.multiForm, ...Array.from({ length: action.payload }).map(() => ({firstName: '', lastName: ''}))]; return { ...state, multiForm: [...state.multiForm, ...Array.from({ length: action.payload }).map(() => ({firstName: '', lastName: '' }))] };
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2021-07-21
    • 2019-04-08
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多