ReactJS:如何将数据从本地存储中的 JSON 传递到组件?

标签 reactjs react-redux

我一直在尝试获取已设置到本地存储中的 JSON 数据的值。然后,我尝试使用 .map 函数从 Food.js 文件访问此数据(处于 APP.js 状态)。返回的值仅在 APP.js 的警报中,即 [object Object]、[object Object]、[object Object] 然后它说 .map 不是函数。你们知道这是怎么回事吗?

App.js

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Food from './Food.js';
import Form from './Form.js';

class App extends Component {
  constructor(){
    super();
    var testObject = [
      {title: "Pumpkin Pie", ingredients: ["Pumpkin Puree", "Sweetened Condensed Milk", "Eggs", "Pumpkin Pie Spice", "Pie Crust"]},
      {title: "Spaghetti", ingredients: ["Noodles", "Tomato Sauce", "(Optional) Meatballs"]},
      {title: "Onion Pie", ingredients: ["Onion", "Pie Crust", "Sounds Yummy right?"]}
    ];

  localStorage.setItem('testObject', JSON.stringify(testObject));

    this.state = {
      apple:localStorage.getItem('testObject')
    }
    alert(JSON.parse(localStorage.getItem('testObject')));
}

  render() {
    return (
      <div className="App">
        <div id="app">
          <div>
            <ul>
              <Food ingTitle={this.state.apple} />
            </ul>
          </div>

        </div>
        <Form />
      </div>
    );
  }
}

export default App;

食品.js

import React, { Component } from 'react';
import './Food.css';
import FoodList from './FoodList.js';

export default class Food extends Component {

  constructor(props){
    super(props);
    this.state = {
      isToggleTrue:false
    }
    this.handleClick = this.handleClick.bind(this)
  }


  handleClick(e){
    e.preventDefault();

    this.setState(prevState => ({
      isToggleTrue: !prevState.isToggleTrue
    }));
  };


  render() {
    return (
      <div className="Food">
        <li className="foods"><a href="#" onClick={this.handleClick}>asdfasdf</a>

          <FoodList name ="asdf" />
        </li>
        <div>{
          this.props.ingTitle.map((a,i) => {
            <li>{a.ingredients}</li>
          })
        }</div>
      </div>
    );
  }

}

最佳答案

localStorage 将项目分配给 state 时,您还需要使用 JSON.parse 因为您使用 JSON.stringify 同时在 localStorage

中设置数据
this.state = {
  apple:JSON.parse(localStorage.getItem('testObject'))
}

你得到一个错误,因为在初始化状态时你直接将 localStorage 的结果分配给 state 这是一个 string 因此没有 map 上面定义的方法。

关于ReactJS:如何将数据从本地存储中的 JSON 传递到组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48794239/

相关文章:

javascript - "TypeError: Cannot destructure property ' 产品 ' of ' 产品详细信息 ' as it is undefined"

node.js - 当我在控制台中构建项目时,阻止 VS Code 打开 Web 浏览器窗口

javascript - 如何找出ReactJS中的错误来自哪里?

reactjs - 如何找到用户何时停止输入受控组件?

javascript - 查看 'PodCastScreen' React Native的render方法

reactjs - 如何在没有域名(仅 IP)的服务器上使用 nginx 服务 react-create-app 构建?

javascript - React 使用 for 循环在每个 div 中追加 5 个项目

reactjs - React-Redux - Hooks API

reactjs - react native : mapping though a mounted non-null value

reactjs - react-select onInputChange 清除值并且不使用按 enter 后选择的值更新文本框。