javascript - ReactJS:我可以在单独的组件中分离一个改变状态的函数吗?

标签 javascript reactjs

我的 React 应用程序中有一个函数调用 componentWillMount 生命周期方法。 它从 JSON 文件中获取数据并将其推送到组件的状态(它是文本数据,稍后我将该文本插入到页面中)。

我将在许多其他组件上使用相同的功能,我可以将此功能分离到一个单独的组件中以使其可重用吗?

这是我的代码:

import React from 'react';
import axios from 'axios';
import logo from '../img/company_logo.png';
import '../css/header.scss';
import getTextData from './getTextData';


const NumberList = (props) => {
  console.log(props.value);

  const itemList = props.value;

  const listItems = itemList.map(number => (
    <li key={number.toString()}>
      {number}
    </li>
  ));
  return (
    <ul>{listItems}</ul>
  );
};

export default class Header extends React.Component {
  constructor() {
    super();
    this.state = {};
  }

  componentWillMount() {
    axios.get('./data.json')
      .then((res) => {
        this.setState({
          siteData: res.data,
        });
      })
      .catch((err) => {
        console.log(err);
      });
  }

  render() {
    // console.log(this.state);
    const { siteData } = this.state;

    if (siteData) {
      console.log(siteData.data.mainPage.navBar);
    } else {
      return null;
    }

    return (
      <div className="headerWrapper">
        <a href=".../public/index.html"><img src={logo} alt="company_logo" id="companyLogo" /></a>
        <NumberList value={siteData.data.mainPage.navBar} />
      </div>
    );
  }
}

最佳答案

是的,创建一个函数并返回响应数据,必须使用异步等待

//fetchService.js
    import axios from 'axios';
    export default async function fetchService(){
       let responseData = [];    
       await axios.get('./data.json')
          .then((res) => {
             responseData = res.data;
          })
          .catch((err) => {
            console.log(err);
          });
       return responseData;
    }
// App.js
import fetchService from './fetchService';
 async componentDidMount() {
    let tempData = await fetchService();
     this.setState({
          siteData: tempData,
     });
  }

希望对您有所帮助!

关于javascript - ReactJS:我可以在单独的组件中分离一个改变状态的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56180670/

相关文章:

javascript - v-for 的每个项目的组件

javascript - componentWillUnmount 没有被调用

javascript - 如何防止用户在 react 日期中选择高于结束日期的日期

javascript - 在 enzyme / react 单元测试中模拟形式变化不会改变字段值

javascript - Raphael JS 将一组图纸作为一个移动/旋转?

php - 动态验证表单数据

javascript - 试图阻止我的弹出窗口(需要替代 "window.open")

reactjs - 在执行 npm run dev 时,nextjs 的 React 给出错误

javascript - Formik 和 Yup 验证

javascript - 客户端开发 - 进行中/已完成指标首选项?