【发布时间】:2019-11-26 01:57:29
【问题描述】:
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import Actions from '../actions';
export const UserComponent = ({ foo, baz, bar, user, fetchUser }) => {
useEffect(() => {
console.log('##### I WAS CALLED I WAS CALLED');
fetchUser();
}, []);
return (
<div>
<p>{user.name}</p>
<p>{foo} {baz} {bar}</p>
</div>
);
};
UserComponent.propTypes = {
fetchUser: PropTypes.func.isRequired,
user: PropTypes.shape({}),
};
const mapActionsToProps = {
fetchUser: Actions.fetchUser,
};
const mapStateToProps = ({ data }) => ({
user: data.user,
});
export default connect(mapStateToProps, mapActionsToProps)(UserComponent);
我收到一个错误“React Hook useEffect 缺少依赖项”
但是如果我把fetchUser 放在依赖数组中
useEffect(() => {
console.log('##### I WAS CALLED I WAS CALLED');
fetchUser();
}, [fetchUser]);
它会导致无限循环。
【问题讨论】:
-
您是否尝试过使用
useEffect(() => {fetchUser()});完全省略依赖关系数组?换句话说,不要将第二个参数传递给useEffect。 -
抱歉,我更新了我的问题。我有多个道具被传递给组件,并且我不想每次这些道具更改时都运行 useEffect 。我只想第一次获取用户,而不是每次所有 API 都更改时。
-
如何使用
user作为useEffect的第二个参数,因为您只想在user更改时更新。如useEffect(() => {fetchUser()}, [user]); -
嗯,总有
// eslint-disable-next-line react-hooks/exhaustive-deps -
将您的解决方案发布为答案并将其标记为解决方案的其他人会有所帮助。
标签: javascript reactjs eslint react-hooks