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));        
        }
      }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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}`));           
        }
      }

Спасибо, ваша идея привела меня к решению. Я отредактировал свой пост с окончательным рабочим кодом. :)

schwaluck 15.05.2022 16:53

Другие вопросы по теме