尝试在 React 中使用状态存储数据以便以后可以访问时遇到问题

Having issues trying to store data using state in React so that it is accessible later

我正在编写一个 React 应用程序,通过搜索(表单)从 API 中提取特定数据,存储它并使用过滤器操作它等等。到目前为止,我已经提取并显示了数据,但我只是不知道如何使用状态来存储它,这样我就可以访问它而不必进行全新的数据提取。

到目前为止,我已尝试返回 API 数据以将其存储在函数内部的本地列表中,但随后我对它进行操作的访问权限为零。我想我需要 'list' 并将姓名和年龄存储在状态中,然后进行访问,但我不知道该怎么做。任何帮助将不胜感激。

function dataPull(param) {

    const list = [
        { name: '', age: ''}
    ]

    const URLbase = "https://APIexample.com";
    const query = URLbase + param;
    const URL = URLbase + param;

    fetch(URL)
       .then(fnc(res) {
           let text = document.getElementById('textSpot');
           res.map(res => (
              <list key={res.name} age={res.age} />
           ));
           text.innerHTML = res;
}

一般来说,您不应该在 React 应用程序中操纵 DOM 或设置 innerHTML

如果要将数据存储在组件状态中,请在 componentDidMount 生命周期方法(或等效挂钩)中进行提取,然后调用 this.setState({results: fetchedData})。然后,您的渲染方法可以通过 this.state.results 获取数据并进行相应渲染。 (参见下面的示例。)

如果您只想使用此组件之外的数据,您可能需要考虑实现一个独立于该组件的数据存储。 Here's an example 你会怎么做。

const fakeData = [
  {
    name: "chewy",
    age: 900
  },
  {
    name: "chewbacca",
    age: 40
  }
];

// wait a second and then resolve with fakeData
const fakeFetch = () => new Promise((resolve) => {
  setTimeout(() => resolve(fakeData), 1000);
})

class Wookies extends React.Component {
    state = {}

    componentDidMount () {
      fakeFetch()
        .then(result => this.setState({result}));
    }

    render () {
      const {result} = this.state;
      
      if (!result) {
        // not loaded. render loading spinner or whatever.
        return <div>loading</div>;
      }

      return result.map(item => (
        <div key={item.name}>age: {item.age}</div>
      ));
    }
}

ReactDOM.render(<Wookies />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="app" />

试试这个,

function dataPull(param) {

    const list = [
        { name: '', age: ''}
    ]

    const URLbase = "https://APIexample.com";
    const query = URLbase + param;
    const URL = URLbase + param;

    fetch(URL)
       .then(fnc(res) {
           let text = document.getElementById('textSpot');
           let items = [];
           items = res.map(res => (
              <list key={res.name} age={res.age} />
           ));
           text.innerHTML = items;
}