我可以将类组件更改为功能组件吗? - 反应

Posted

技术标签:

【中文标题】我可以将类组件更改为功能组件吗? - 反应【英文标题】:Can I change class component into functional component? - Reactjs 【发布时间】:2022-01-05 15:09:15 【问题描述】:

我使用类组件。只是测试它。现在我不知道如何将其转换为功能。这是我的代码:

class PostList extends Component 
   constructor(props) 
    super(props);
    this.state = 
      info: []
    ;
  

  componentDidMount() 
    axios
      .get("https://api2.binance.com/api/v3/ticker/24hr")
      .then((response) => 
        this.setState(
          info: response.data
        );
        console.log(response.data);
      );
  

  render() 
    const  info  = this.state;
    return (
      <div>
        <h2>post!</h2>
        info.map((user) => (
          <div key=user.symbol>
            <h6>user.priceChange</h6>
          </div>
        ))
      </div>
    );
  


export default PostList;

我应该在我的 redux 中使用这段代码,我需要将它转换成函数式组件

我想要这样的东西:

export const PostList = () =>
   return (
    //my code using axios,       
   )
```



 

【问题讨论】:

【参考方案1】:

对于功能组件,你应该使用hooks而不是分类组件默认statecomponentDidMount。因此,要定义新状态,您需要使用useState,而对于componentDidMount,您需要使用useEffect

const PostList  = (props) => 
   const [state,setState] = useState(info:[]);
   useEffect(()=>
      axios
      .get("https://api2.binance.com/api/v3/ticker/24hr")
      .then((response) => 
        setState(
          info: response.data
        );
        console.log(response.data);
      );
     ,[])

  const  info  = state;
    return (
      <div>
        <h2>post!</h2>
        info.map((user) => (
          <div key=user.symbol>
            <h6>user.priceChange</h6>
          </div>
        ))
      </div>
    );



export default PostList;

【讨论】:

【参考方案2】:

既然要使用函数式组件,就必须使用React Hooks!

在您的情况下,使用 useStateuseEffect 挂钩可以帮助分别获得与 this.statecomponentDidMount() 相同的结果。

const PostList  = (props) => 
   const [state,setState] = useState(info:[]);
   
   useEffect(()=>
      axios
      .get("https://api2.binance.com/api/v3/ticker/24hr")
      .then((response) => 
        setState(
          info: response.data
        );
        console.log(response.data);
      );
     ,[])

    return (
      <div>
        <h2>post!</h2>
        state.info.map((user) => (
          <div key=user.symbol>
            <h6>user.priceChange</h6>
          </div>
        ))
      </div>
    );



export default PostList;

【讨论】:

你能描述一下这个答案和给出的答案有什么区别吗? 对不起,我刚刚注意到有类似的答案。但是,我相信区别在于const info = this.state;。如果我错了,请纠正我,但由于它现在是一个功能组件,我们不再需要使用 this 关键字。此外,我们也可以只做一个state.info.map 来引用状态中的 info 属性

以上是关于我可以将类组件更改为功能组件吗? - 反应的主要内容,如果未能解决你的问题,请参考以下文章

将颜色更改为功能组件

使用功能组件对反应进行排序

在功能组件的函数内反应redux值返回一个周期后的值

功能组件在反应中有道具吗?

反应:从类转换为具有状态的功能组件

打印一个反应功能组件