Добавить функцию поставщика React к объекту глобального окна - PullRequest
0 голосов
/ 02 февраля 2020

Интересно, стоит ли помещать функцию в переменную window.

Например:

Приложение. js

  ...
  <PageContextProvider>
    <AuthContextProvider>
      <Content />
    </AuthContextProvider>
  </PageContextProvider>
  ...

В App.js я помещаю провайдеров контекста в Content

PageContextProvider. js


/**
  * Display Snackbar Messages On Page
  * @param {string} message Message title to be displayed
  * @param {string} status Message Status
  * @param {objext} options Other Options
  * @returns {void}
  */
const addMessage = (message, status = 'success', options = {}) => {
  const m = {
    message,
    status,
    ...options
  };

  setMessages({ ...messages, [new Date().getTime()]: m });
};

/**
  * Display Snackbar Messages On Page
  * @param {string} message Message title to be displayed
  * @param {string} status Message Status
  * @param {objext} options Other Options
  * @returns {void}
  */
const removeMessage = messagekey => {
  const m = messages;
  delete m[messagekey];
  setMessages({ ...m });
};


useEffect(() => {
  window.addMessage = addMessage;
  window.removeMessage = removeMessage;
}, []);

Как вы можете видеть, я добавил addMessage и removeMessage в window объект. Вот как я собираюсь его использовать:

AuthContextProvider. js

...
  const login = async (email, password) => {
    setAuth(true);
    window.addMessage('You Are successfully Logged In', 'success');
  };
...

Или в любом месте моего приложения:

ExampleComponent. js

...
  window.addMessage('This is example warning message from ExampleComponent', 'warning');
...

Конечно, я могу передать addMessage и removeMessage в качестве значения Content Provider, но я предпочитаю делать это так, потому что мне нужно писать меньше кода, я знаю, что использование переменной window не хорошо, и это медленно, но это всего лишь легкие сообщения, вероятно, используемые раз в минуту или два

Я хочу знать, является ли это хорошей практикой, и должен ли я делать это на производстве. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...