Использование setTimeout в пользовательском плагине бэкэнда убивает вкладку Chrome при загрузке - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь реализовать пользовательский бэкэнд, но всякий раз, когда я вызываю callback функцию каким-либо асинхронным способом, все мое приложение зависает, и мне приходится убивать вкладку в браузере. Это происходит только с useSuspense: true. Из-за того, что я смотрю на код во время его работы, кажется, что я попал в какой-то бесконечный цикл в React.


Вот ссылка на рабочий пример: https://codesandbox.io/s/q8zmxvnn29

Раскомментируйте теги <React.Suspense fallback={<p>Loading...</p>}> в индексном файле, и вся вкладка должна заморозиться при перезагрузке.


Вот так выглядит мой пользовательский бэкэнд:

.use({
    type: "backend",
    read: (lng: string, ns: string, callback: any) => {

        // ==============
        // Kills the tab
        // ==============
        setTimeout(() => {
            callback(null, {
                key1: "value1",
                key2: "value2",
            })
        }, 3000)

        // ==============
        // Works
        // ==============
        // callback(null, {
        //     key1: "value1",
        //     key2: "value2",
        // })
    }
})

Я предполагаю, что мне не хватает какого-то кардинального правила того, как React обрабатывает HOC, но я не могу понять, что я делаю неправильно, или почему тайм-аут блокировал бы все приложение.

...