#json #typescript #react-native #fetch
Вопрос:
const jsonUrlExternal = require('https://reactnative.dev/movies.json'); //this works const jsonUrlLocal = require('../../json/MOCK_DATA.json'); //this doesn't work
Когда я использую первый const jsonUrlExternal
, мое приложение работает хорошо и извлекает данные в JSON. Но когда я просто меняю URL-адрес на локальный путь, это приводит к ошибке: Type Error: Network request failed
. Ниже приведен код, который я использую для извлечения как локального, так и внешнего файла JSON:
const [data, setData] = useState([]); useEffect(() =gt; { fetch(jsonUrlLocal) //the error appears exactly when i write this line .then((response) =gt; response.json()) .then((json) =gt; setData(json.movies)) .catch((error) =gt; alert(error)) })
И это FlatList
то, что я использую для отображения данных из JSON:
lt;FlatList data={data} keyExtractor={({id}, index) =gt; id} renderItem={({item}) =gt; ( lt;Textgt; {item.title}, {item.realeseYear} lt;/Textgt; )} /gt;
Короче говоря: когда я использую внешний JSON с URL-адреса, мой плоский список работает, но когда я просто меняю URL
его на локальный path/to/the/file/
, приложение возвращает мне сообщение об ошибке: Type Error: Network request failed
. OBS: содержимое внутри локального JSON-это в точности НЕОБРАБОТАННАЯ копия внешнего JSON. Я уверен, что в локальном JSON нет ошибок ввода.
Комментарии:
1. Есть ли причина, по которой вы не просто импортируете файл JSON обычным способом (с импортом верхнего уровня)? Файл уже там, вы не берете его откуда-то еще.
Ответ №1:
Когда вы require()
создаете локальный .json
файл, я ожидал бы, что произойдет, если вместо URL-адреса появится объект. Затем Fetch ужалит этот объект и сделает запрос '[object Object]'
, который, естественно, завершится неудачей.
Поскольку вы уже require()
сделали это, нет необходимости доставать его. Он уже проанализирован и готов к использованию.
const mockData = require('../../json/MOCK_DATA.json'); lt;FlatList data={mockData} keyExtractor={({id}, index) =gt; id} renderItem={({item}) =gt; ( lt;Textgt; {item.title}, {item.realeseYear} lt;/Textgt; )} /gt;
Комментарии:
1. Есть ли другой способ использовать мой локальный JSON в этом простом проекте? Я не хочу использовать внешний JSON, потому что я создаю CRUD, поэтому данные будут храниться локально. Я попытался загрузить файл на локальный хост и использовать URL-адрес для доступа к файлу, но у меня получилось
XX.XX/MOCK_DATA.json could not be found within the project
. Спасибо, что помогли мне. Кроме того, извините за мой плохой английский.2. Многое зависит от вашей настройки сборки, но если вы
require()
.json
создадите файл, вы можете просто использовать его как объект. Вам не нужно его доставать или что-то в этом роде.3. Попробуйте
console.log()
jsonUrlLocal
сделать это сразу послеrequire()
. Это должен быть объект (или массив).