Я не понимаю, почему это должен быть компонент, а не просто функция, которую используют другие компоненты.
Но если вы хотите, чтобы это был компонент, который используют другие компоненты, имейте ихпередайте ей функцию сопоставления для использования в качестве реквизита, а затем используйте ее в componentDidMount
, когда вы вернете элементы обратно, и отобразите сопоставленные элементы в render
.
в комментарии, который вы 'Я уточнил:
Я пытаюсь получить JSON один раз, и я не уверен, что лучший способ сделать это.
В этом случае я бы не использовал компонент.Я бы поместил вызов в модуль и попросил бы модуль представить обещание:
export default const dataPromise = fetch("data.json")
.then(res => {
if (!res.ok) {
throw new Error("HTTP status " + res.status);
}
return res.json();
});
Код с использованием обещания будет выглядеть следующим образом:
import dataPromise from "./the-module.js";
// ...
componentDidMount() {
dataPromise.then(
data => {
// ...use the data...
},
error => {
// ...set error state...
}
);
}
Данные выбираются один раз, при загрузке модуля, а затем каждый компонент может использовать его.Важно, чтобы модули обрабатывали данные только для чтения.(Возможно, вы захотите, чтобы модуль экспортировал функцию, которая делает защитную копию.)