【问题标题】:Can't add json in reactjs [duplicate]无法在reactjs中添加json [重复]
【发布时间】:2019-01-02 21:24:47
【问题描述】:

我是 reactjs 的初学者,我正在尝试在我的 js 中导入 JSON 文件。当我使用 JSON 执行 .js 时(例如,但用前四个 var 替换评论中的内容),一切正常,但是当我尝试从另一个文件导入时,出现此错误。 “TypeError:fs.​​readFileSync 不是函数”。

第一个

import React, { Component } from 'react';
import './App.css';
//import people from './db/dab.json';

var fs = require('fs');
var filname = '/db/dab.json';
var data = fs.readFileSync(filname, 'utf-8');
var people = JSON.parse(data);
console.log(people);

/*var people = [
    {
        "id": "johnson",
        "first_name": "Karol",
        "last_name": "Johnson",
        "rank":"1",            
    },
    {
        "id": "smith",
        "first_name": "John",
        "last_name": "Smith",
        "rank":"2",        
]*/

function searchingFor(term){
    return function (x) {
        return x.first_name.toLowerCase().includes(term.toLowerCase()) || x.last_name.toLowerCase().includes(term.toLowerCase()) || x.birth_city.toLowerCase().includes(term.toLowerCase()) ||  x.address.address1.toLowerCase().includes(term.toLowerCase());
    }
}

class App extends Component {
    constructor(props) {
        super(props);
        this.state={
            people: people,
            term:'',
        }
        this.searchHandler = this.searchHandler.bind(this);
    }

    searchHandler(event){
        this.setState({ term: event.target.value})
    }

    render() {
        const {term, people} = this.state;
        return (
            <div className="App">
                <form>
                    <input type="texte"
                           onChange={this.searchHandler}
                           value={term}
                    />
                </form>
                {
                    people.filter(searchingFor(term)).map( person =>
                        <div key={person.id}>
                            <h3>{person.rank}</h3>

                    )
                }
            </div>
        );
    }
}

export default App;

感谢您的帮助。

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    如果这发生在您的浏览器中,那么您将无法访问仅限于服务器端 NodeJS 的fs。您只需通过 Web api 或 window.fetch() 访问 JSON,然后只需 JSON.parse(data) 即可将其作为 JS 对象访问。

    【讨论】:

    • 我不明白在浏览器中测试需要做什么?
    • 可能会将 JSON 文件作为资产发送并通过 fetch(‘assetPath’).then(response =&gt; doStuff()) 访问它。以下是有关 fetch API 的信息:developer.mozilla.org/en-US/docs/Web/API/Fetch_API
    • 可以直接导入,不做fetch
    • @LuisGurmendez 你能说我这样做吗?
    • 是的,我在你原来的问题中读到了。你不能使用 fs。你读过路易斯的回答吗?
    【解决方案2】:

    客户端应用程序(在浏览器中执行的应用程序)无法访问您的文件系统,因此您必须直接导入文件。仅当应用程序执行时文件已在文件系统中时才会发生这种情况。

    说到做到,方法如下。

    import people from './db/dab.json';
    people = JSON.parse(people);
    

    【讨论】:

    • 但是在你的例子中 people 是只读的
    • 哦,那你要修改你文件系统的json?您应该创建一个服务器并通过 HTTP 请求更新文件。如果你使用 node 作为后端,你可以使用 fs 库。您可以从这里alligator.io/nodejs/express-basics 开始并创建一个简单的快速服务器并定义一个 post 方法,其中包含所有修改 json 的逻辑。在客户端,您可以使用 axios 发出请求并将人员对象作为参数传递。我希望这会有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2021-08-22
    • 1970-01-01
    • 2019-04-18
    • 2020-04-06
    • 2019-08-05
    相关资源
    最近更新 更多