【问题标题】:What is extraReducers map object notion什么是 extraReducers 映射对象概念
【发布时间】:2021-10-31 04:15:07
【问题描述】:

在阅读 redux toolkit 官方文档时,我在createSlice 部分看到了这个:

const incrementBy = createAction('incrementBy')

createSlice({
  name: 'counter',
  initialState: 0,
  reducers: {},
  extraReducers: {
    [incrementBy]: (state, action) => {. ///what is this
      return state + action.payload
    },
    'some/other/action': (state, action) => {},
  },
})

我不明白为什么我们在这里有array。为什么我们在这里使用string 以及为什么我们在数组中使用它[incrementBy])?

请帮忙,非常感谢

【问题讨论】:

    标签: javascript reactjs redux redux-toolkit


    【解决方案1】:

    这不是数组,而是计算属性。这将在运行时将key 添加到对象

    let prop = "name";
    const obj = {
      [prop]: "Stackoverflow",
    };
    console.log(obj);

    extraReduce 是一个对象,在代码中incrementBy 将给出属性名称,您也正在为该属性名称分配一个函数。

    let prop = "getSum";
    const obj = {
      [prop]: (arr) => {
        return arr.reduce((acc, curr) => acc + curr, 0);
      },
    };
    console.log(obj[prop]([1, 2, 3, 4, 5]));
    console.log(obj.getSum([1, 2, 3, 4, 5]));

    【讨论】:

    • 我知道了,非常感谢,但我还有一个问题,为什么我们不直接使用name:"Stackoverflow"
    • 在运行时之前可能不知道该属性的名称。它也可能会改变。它不会每次都是静态的。假设今天您将属性名称命名为getSum,某人或您未来的自己想将名称更改为addNumbers。所以你使用计算属性做到了dynamic
    • 属性名称可能来自其他地方的代码。它可能是一个图书馆。所以最好让它动态化。
    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多