React Hook React.useEffect 错误
React Hook React.useEffect errol
React Hook React.useEffect 缺少依赖项:'params.id'。包括它或删除依赖项数组 react-hooks/exhaustive-deps。我项目中的很多地方都出现了这个错误。
Image Sample
import React, { Fragment } from "react";
import ArticleDetails from "./List";
import { connect } from "react-redux";
import {
articleFetchById,
articleFetch,
articleFetchByChannel
} from "../../../redux/action/articles";
const Article = ({
articles,
articleFetchById,
match: { params },
auth,
articleFetch,
articleFetchByChannel
}) => {
React.useEffect(() => {
articleFetchById(params.id);
}, [articleFetchById]);
React.useEffect(() => {
articleFetch();
}, [articleFetch]);
React.useEffect(() => {
articleFetchByChannel();
}, [articleFetchByChannel]);
return (
<Fragment>
<ArticleDetails articles={articles} auth={auth} matchId={params.id} />
</Fragment>
);
};
const mapStateToProps = state => {
return {
articles: state.articles,
auth: state.auth
};
};
export default connect(mapStateToProps, {
articleFetchById,
articleFetch,
articleFetchByChannel
})(Article);
您需要在 useEffect 的第二个参数数组中传递 params.id
(因为您在 useEffect 中使用它)。这应该可以修复警告。
React.useEffect(() => {
articleFetchById(params.id);
}, [articleFetchById, params.id]);
理想情况下,您应该在 useEffect 挂钩中包含您正在使用的所有依赖项,因为如果您不使用,您可能会错过一些功能。
目前最好的解决方案是在 https://reactjs.org/docs/hooks-rules.html#eslint-plugin 中使用 ES Lint 插件,将 react-hooks/exhaustive-deps 标记为警告。
"react-hooks/exhaustive-deps": "warn"
React Hook React.useEffect 缺少依赖项:'params.id'。包括它或删除依赖项数组 react-hooks/exhaustive-deps。我项目中的很多地方都出现了这个错误。
Image Sample
import React, { Fragment } from "react";
import ArticleDetails from "./List";
import { connect } from "react-redux";
import {
articleFetchById,
articleFetch,
articleFetchByChannel
} from "../../../redux/action/articles";
const Article = ({
articles,
articleFetchById,
match: { params },
auth,
articleFetch,
articleFetchByChannel
}) => {
React.useEffect(() => {
articleFetchById(params.id);
}, [articleFetchById]);
React.useEffect(() => {
articleFetch();
}, [articleFetch]);
React.useEffect(() => {
articleFetchByChannel();
}, [articleFetchByChannel]);
return (
<Fragment>
<ArticleDetails articles={articles} auth={auth} matchId={params.id} />
</Fragment>
);
};
const mapStateToProps = state => {
return {
articles: state.articles,
auth: state.auth
};
};
export default connect(mapStateToProps, {
articleFetchById,
articleFetch,
articleFetchByChannel
})(Article);
您需要在 useEffect 的第二个参数数组中传递 params.id
(因为您在 useEffect 中使用它)。这应该可以修复警告。
React.useEffect(() => {
articleFetchById(params.id);
}, [articleFetchById, params.id]);
理想情况下,您应该在 useEffect 挂钩中包含您正在使用的所有依赖项,因为如果您不使用,您可能会错过一些功能。
目前最好的解决方案是在 https://reactjs.org/docs/hooks-rules.html#eslint-plugin 中使用 ES Lint 插件,将 react-hooks/exhaustive-deps 标记为警告。
"react-hooks/exhaustive-deps": "warn"