reactjs - 将 react 中的类基组件转换为钩子
问题描述
我是反应钩子的新手,我很难将这个类转换为具有 ES6 语法的反应钩子。有人能帮帮我吗?这是我的朋友...
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Link } from 'react-router-dom';
import { fetchMovie, setLoading } from '../../actions/searchActions';
import Spinner from '../layout/Spinner';
export class Movie extends Component {
componentDidMount() {
this.props.fetchMovie(this.props.match.params.id);
this.props.setLoading();
}
render() {
const { loading, movie } = this.props;
let movieInfo = (
<div className="container">
jsx......
</div>
);
let content = loading ? <Spinner /> : movieInfo;
return <div>{content}</div>;
}
}
const mapStateToProps = state => ({
loading: state.movies.loading,
movie: state.movies.movie
});
export default connect(
mapStateToProps,
{ fetchMovie, setLoading }
)(Movie);
解决方案
一些最常用的钩子是useState
, useEffect
。useState 在某些方面类似于 setState,不同之处之一是您没有 useState 的回调功能。您可以使用 useEffect 来实现类似的效果。useEffect
可以作为componentDidMount
,componentDidUpdate
和componentWillUnmount
. 如果您传递一组空的依赖项[]
(如下例所示),它的行为类似于componentDidMount
. 如果您希望根据某些条件(例如正在更新的状态等)触发特定功能,您可以将其作为dependancy
. 然后, 的useEffect
行为为componentDidUpdate
。useEffect
接受第三个参数,作为回调函数。这在卸载组件时触发,从而添加componentWillUnmount
行为。
import React, { useEffect } from 'react';
import { connect } from 'react-redux';
import { Link } from 'react-router-dom';
import { fetchMovie, setLoading } from '../../actions/searchActions';
import Spinner from '../layout/Spinner';
const Movie = () => {
useEffect(() => {
props.fetchMovie(props.match.params.id);
props.setLoading();
}, [])
const { loading, movie } = props;
let movieInfo = (
<div className="container">
jsx......
</div>
);
let content = loading ? <Spinner /> : movieInfo;
return <div>{content}</div>;
}
const mapStateToProps = state => ({
loading: state.movies.loading,
movie: state.movies.movie
});
export default connect(
mapStateToProps,
{ fetchMovie, setLoading }
)(Movie);
推荐阅读
- python - Python 中的 AWS Lambda 部署包
- javascript - 当 JS 尝试从内部服务器获取数据时连接被拒绝
- spring-boot - Spring Boot 进行 LDAP 身份验证的方式
- python - sqlalchemy:不同表的相同基础
- javascript - 如何设置动态创建的默认下载文件名
- go - 一个全局函数中的多个 GOLANG 函数
- typescript - 我可以在我的应用关闭时启动电子更新器更新吗?
- c# - MongoDb .NET 映射继承的类成员
- cuda - 禁用 CUDA 编译器驱动程序的二进制缓存
- unit-testing - 在本机环境中使用 PlatformIO 进行 Unity 测试 - 没有 avr-gcc 库