React Redux -动态调度函数名



我目前在React Native中做一个项目,我使用React -redux。

现在的情况是,我想用动态输入调用分派钩子。然而,它只是不工作,但我在控制台中没有得到错误信息。

一些备注:

  • 用户对象包含我想要添加到状态的键值对(例如name: John Doe)
  • 我尝试了多个版本的函数名分配给调度钩子,但都失败了

谁能告诉我,我做错了什么?

我当前的代码:

import {
resetCompleteStoreState,
setAdressCity,
setAdressZipcode,
setEmail,
setName,
setPhone,
} from "../../../app/redux/features/auth/userSlice";
... more Code ... 
var functions = new Map();
[setAdressCity, setAdressZipcode, setEmail, setName, setPhone].forEach(
(fn) => {
functions.set("" + fn, fn);
}
);
for (let [key, value] of Object.entries(response.data.data.user)) {
if (key.includes("_")) {
var i,
frags = key.split("_");
for (i = 0; i < frags.length; i++) {
frags[i] = frags[i].charAt(0).toUpperCase() + frags[i].slice(1);
}
key = frags.join("");
} else {
key = key.charAt(0).toUpperCase() + key.slice(1);
}
if (key != "Id") {
stateMethod = functions.get("user/set" + key);
dispatch(stateMethod(value));        
}
}

你不能从字符串中调用函数,除非你将它们存储在某个对象中进行转换

这样的

import {
resetCompleteStoreState,
setAdressCity,
setAdressZipcode,
setEmail,
setName,
setPhone,
} from "../../../app/redux/features/auth/userSlice";
... more Code ... 
const functions = new Map()
[ setAdressCity,
setAdressZipcode,
setEmail,
setName,
setPhone].forEach(fn => {
functions.set(fn.name, fn)
})
for (let [key, value] of Object.entries(response.data.data.user)) {
if (key.includes("_")) {
var i,
frags = key.split("_");
for (i = 0; i < frags.length; i++) {
frags[i] = frags[i].charAt(0).toUpperCase() + frags[i].slice(1);
}
key = frags.join("");
} else {
key = key.charAt(0).toUpperCase() + key.slice(1);
}
if (key != "Id") {
//  dispatch("user/set" + `${key}` + `(${value})`);
//  dispatch(`set${key}`(`${value}`));
test = functions["set" + key];
console.log(test);
dispatch(test(`${value}`));           
}
}

最新更新