【问题标题】:Redux action creator syntaxRedux 动作创建者语法
【发布时间】:2017-01-08 10:13:28
【问题描述】:
function addTodoWithDispatch(text) {
  const action = {
    type: ADD_TODO,
    text
  }
  dispatch(action)
}

http://redux.js.org/docs/basics/Actions.html#action-creators

我从 redux 文档中看到了上面的代码。我不明白的是action 中的text。它看起来不像是有效的 javascript 对象或数组语法。它是 ES6 的新语法吗?谢谢。

【问题讨论】:

  • 能否提供该文档的链接?从您的示例来看,它看起来不像是一个有效的 javascript 对象。
  • 当然。谢谢。更新了我的问题。

标签: javascript reactjs redux


【解决方案1】:

它只是一个新的ES6 syntax,它简化了在字面语法上创建属性

简而言之,如果名称与属性相同,只需写一次即可

所以这将是完全相同的:)

function addTodoWithDispatch(text) {
  const action = {
    type: ADD_TODO,
    text: text
  }
  dispatch(action)
}

【讨论】:

    【解决方案2】:

    在上面的代码中

    function addTodoWithDispatch(text) {
      const action = {
        type: ADD_TODO,
        text
      }
      dispatch(action)
    }
    

    这里的text 是对象文字速记符号的一个示例。 ES6 为您提供了一种快捷方式来定义一个对象的属性,该对象的值等于具有相同键的另一个变量。

    如前所述,这只是写作的简写

    const action = {
        type: ADD_TODO,
        text: text
      }
      dispatch(action)
    

    看看这个blog

    【讨论】:

    • @Aprillion 没注意,其他的我删了,谢谢提醒
    【解决方案3】:

    如果您查看文档http://redux.js.org/docs/basics/Reducers.html中的下一页

    function todoApp(state = initialState, action) {
     switch (action.type) {
      case SET_VISIBILITY_FILTER:
      return Object.assign({}, state, {
        visibilityFilter: action.filter
      })
     case ADD_TODO:
      return Object.assign({}, state, {
        todos: [
          ...state.todos,
          {
            text: action.text,
            completed: false
          }
        ]
      })
    case TOGGLE_TODO:
      return Object.assign({}, state, {
        todos: state.todos.map((todo, index) => {
          if(index === action.index) {
            return Object.assign({}, todo, {
              completed: !todo.completed
            })
          }
          return todo
        })
      })
    default:
      return state
     }
    }
    

    它需要属性名称文本。正如@Icepickle 提到的,这是一种有效的格式,但您也可以更改为以下格式:

    function addTodoWithDispatch(text) {
      const action = {
         type: ADD_TODO,
         text:text
       }
      dispatch(action)
    }
    

    【讨论】:

    • @ElgsQianChen 我看不到谁投了反对票,所以我问那个投反对票的人。
    • 您没有正确解释它,他的代码中的语法是完全正确的(参见其他 2 个响应),它是 ES6 中新的对象速记文字语法。的确,您可以按照您的建议编写它,但是代码最初没有任何问题,因此您的建议是无声的(尤其是如果您使用箭头函数/ ES6 中还引入的传播语法)。简而言之,你的回答没有带来任何新的东西,也没有回应问题本身
    • @Icepickle 感谢您的评论。很高兴知道。
    • @vishalpatel 没有什么能阻止您编辑您的答案以使其成为一个好的答案,添加其他 2 个答案未添加的内容,或删除它(除了可能获得的 +6 代表点1 次赞成 (+10) 和 2 次反对 (-4))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    相关资源
    最近更新 更多