React Redux — имя функции динамической отправки

В настоящее время я работаю над проектом в React Native, где использую react-redux.

Теперь у меня есть ситуация, в которой я хотел бы вызвать хук диспетчера с динамическим вводом. Однако это просто не работает, но я не получаю сообщения об ошибке в консоли.

Некоторые замечания:

  • пользовательский объект содержит пары ключ-значение, которые я хочу добавить в состояние (например, имя: Джон Доу)
  • Я пробовал несколько версий назначения имени функции диспетчерскому хуку, но все потерпели неудачу.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

Мой текущий код:

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));        
        }
      }

🤔 А знаете ли вы, что...
Синтаксис JavaScript схож с синтаксисом языка программирования Java, но они не связаны.


22
1

Ответ:

Решено

вы не можете вызвать функцию из строки, если вы не сохраните их в каком-то объекте, который выполняет перевод

как это

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.info(test);
           dispatch(test(`${value}`));           
        }
      }