Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ReactJS';中的函数编程替换大量switch语句;s商店和行动_Javascript_Functional Programming_Reactjs - Fatal编程技术网

Javascript 使用ReactJS';中的函数编程替换大量switch语句;s商店和行动

Javascript 使用ReactJS';中的函数编程替换大量switch语句;s商店和行动,javascript,functional-programming,reactjs,Javascript,Functional Programming,Reactjs,我不知道是不是只有我,但ReactJS存储中的switch语句会造成麻烦,所以我想也许有一种方法可以用更好的、模块化的switch语句替换这些switch语句 因此,我在互联网上研究了相当长的一段时间,发现一种功能性的方法是可行的 开关 计划 第一个问题 我不想将CREATE、UPDATE、DESTROY作为函数名,因为它不灵活,而且我已经失去了对常量的使用,所以有没有办法我仍然可以将Constant.CREATE、Constant.UPDATE和Constant.DESTROY作为函数名 第二

我不知道是不是只有我,但ReactJS存储中的switch语句会造成麻烦,所以我想也许有一种方法可以用更好的、模块化的switch语句替换这些switch语句

因此,我在互联网上研究了相当长的一段时间,发现一种功能性的方法是可行的

开关 计划 第一个问题 我不想将
CREATE
UPDATE
DESTROY
作为函数名,因为它不灵活,而且我已经失去了对常量的使用,所以有没有办法我仍然可以将
Constant.CREATE
Constant.UPDATE
Constant.DESTROY
作为函数名

第二个问题 因此理论上,我可以将每个动作
创建
更新
销毁
模块化为单独的文件,我使用的是browserify


那么我该怎么做呢?

您可以将查找表定义为
var move={};move[Constants.CREATE]=function(){…}
.wew,第一个问题解决了,就像这样:D
Dispatcher.register(function (action) {
  var text;

  switch(action.actionType) {
    case Constants.CREATE:
      create(action.text)
      Store.emitChange();
      break;
    case Constants.UPDATE:
      update(action.id, {text:action.text})
      Store.emitChange();
      break;
    case TodoConstants.DESTROY:
      destroy(action.id);
      Store.emitChange();
      break;
    default:   
  }
});
getAction = function(action) {
   var move = {
       "CREATE": function() {create(action.text)},
       "UPDATE": function() {update(action.id, {text: action.text})},
       "DESTROY": function() {delete(action.id)}
   }
   return move[action.type](); // if key exist
}