Tôi đang thực hiện một ví dụ từ https://github.com/moroshko/react-autosuggestmodule es6 thực hiện, làm thế nào để tải tệp json
đang quan trọng là như thế này:
import React, { Component } from 'react';
import suburbs from 'json!../suburbs.json';
function getSuggestions(input, callback) {
const suggestions = suburbs
.filter(suburbObj => suburbMatchRegex.test(suburbObj.suburb))
.sort((suburbObj1, suburbObj2) =>
suburbObj1.suburb.toLowerCase().indexOf(lowercasedInput) -
suburbObj2.suburb.toLowerCase().indexOf(lowercasedInput)
)
.slice(0, 7)
.map(suburbObj => suburbObj.suburb);
// 'suggestions' will be an array of strings, e.g.:
// ['Mentone', 'Mill Park', 'Mordialloc']
setTimeout(() => callback(null, suggestions), 300);
}
này đang copy-paste từ ví dụ (làm việc) , có một lỗi trong dự án của tôi:
Error: Cannot resolve module 'json' in /home/juanda/redux-pruebas/components
Nếu tôi đưa ra các preffix json !:
import suburbs from '../suburbs.json';
Bằng cách này tôi đã không có lỗi tại thời gian biên dịch (nhập khẩu được thực hiện). Tuy nhiên tôi đã nhận lỗi khi tôi thực hiện nó:
Uncaught TypeError: _jsonfilesSuburbsJson2.default.filter is not a function
Nếu tôi gỡ lỗi nó tôi có thể thấy vùng ngoại ô là một objectc, không phải là một mảng rất chức năng lọc không được định nghĩa.
Tuy nhiên trong ví dụ là các đề xuất nhận xét là một mảng. Nếu tôi viết lại các đề xuất như thế này, mọi thứ đều hoạt động:
const suggestions = suburbs
var suggestions = [ {
'suburb': 'Abbeyard',
'postcode': '3737'
}, {
'suburb': 'Abbotsford',
'postcode': '3067'
}, {
'suburb': 'Aberfeldie',
'postcode': '3040'
} ].filter(suburbObj => suburbMatchRegex.test(suburbObj.suburb))
Vì vậy ... json! preffix đang làm trong quá trình nhập?
Tại sao tôi không thể đặt mã vào mã? Một số cấu hình Babel?
Cảm ơn bạn rất nhiều! Tài liệu cho trình tải json đã thực sự hiển thị các thiết lập cho webpack v2, vì vậy không có gì làm việc cho tôi (sử dụng v1!). Vì vậy, cho tất cả các bạn ra khỏi đó, sử dụng bộ nạp, không phải quy tắc! Thêm vào đó, thay đổi 'sử dụng' bên trong đối tượng đó thành 'loader', giống như câu trả lời này! – nbkhope
Như @ alexander-t đã đề cập, bây giờ bạn có thể nhập các tệp json mà không có trình tải json, nhưng nếu bạn gặp phải vấn đề mà bộ nạp json không được nhận dạng, bạn chỉ cần thêm hậu tố '-loader' vào bộ nạp cấu hình như thế này: '{test: /\.json$/, loader: 'json-loader'}' – cvetanov
Tại sao json được nhập không được sao chép vào outDir nếu nó được nhập qua kiểu chữ? – FrankerZ