reactjs - reactjs中的组件重新渲染
问题描述
我正在开发反应应用程序,当我放置console.log('Hello')
它时,我的组件之一会继续重新渲染。我不确定为什么。这就是我的组件的外观。任何帮助都会很棒
DispensingIncident.jsx
const DispensingIncidents = (props) => {
const classes = useStyles();
const {
getFilterData,
dispensingData,
getPeriodList,
getTypeList,
getOverviewData,
location,
history,
} = props;
const [timeSpan, setTimeSpan] = React.useState("Monthly");
const [year, setYear] = React.useState(2020);
const [tabValue, setTabValue] = React.useState(0);
const [spanData, setSpanData] = React.useState([]);
const [dataType, setDataType] = React.useState("aim");
const {
loading,
duration,
period,
type,
dispensingOverviewData,
overviewDataLoading,
} = dispensingData;
const { count } = dispensingOverviewData;
// console.log("props", duration["monthly"][0].period);
console.log("Hellowo");
useEffect(() => {
getPeriodList();
getTypeList();
// eslint-disable-next-line
}, []);
useEffect(() => {
history.replace({
pathname: location.pathname,
search: `?year=${year}&period=${timeSpan}`,
});
setYear(year);
setTimeSpan(timeSpan);
// eslint-disable-next-line
}, [year, timeSpan]);
useEffect(() => {
getFilterData(year);
// eslint-disable-next-line
}, [year]);
/**
* GET query from url search param
* @usage query.get("year")
*/
function useQuery() {
return new URLSearchParams(location.search);
}
const query = useQuery();
/**
*
* @param {*} event
* @param {*} newValue
* on tab change
*/
// eslint-disable-next-line
const handleTabChange = (event, newValue) => {
setTabValue(newValue);
};
/**
* Year change
* @param {*} event
*/
const handleYearChange = (event) => {
setYear(event.target.value);
setTimeSpan(query.get("period"));
};
/**
* Span change
* @param {*} event
*/
const handleSpanChange = (event) => {
const value = event.target.value;
setTimeSpan(value);
};
const time = query.get("period");
useEffect(() => {
if (time === "Yearly") {
const yearlyData = duration["yearly"];
setSpanData(yearlyData);
} else if (time === "Weekly") {
const weeklyData = duration["weekly"];
setSpanData(weeklyData);
} else if (time === "Quarterly") {
const quarterlyData = duration["quarterly"];
setSpanData(quarterlyData);
} else if (time === "Monthly") {
const monthlyData = duration["monthly"];
setSpanData(monthlyData);
} else if (time === "6 months") {
const halfYearlyData = duration["half-yearly"];
setSpanData(halfYearlyData);
}
}, [time, duration]);
const handleSpanTabChange = (data) => {
getOverviewData(year, data.period.to, data.period.from, dataType);
};
const handleDataTypeChange = (event) => {
setDataType(event.target.value);
};
if (loading) {
return (
<Loading/>
);
}
return (
<div className={classes.dispenseRoot}>
<Paper
elementType="div"
elevation={5}
square={true}
variant="elevation"
className={classes.topContainer}
>
// content here......
</Paper>
</div>
);
};
function mapStateToProps(state) {
return {
dispensingData: state.dispensing,
};
}
const mapDispatchToProps = (dispatch) => ({
getFilterData: (year) =>
dispatch({ type: GET_DISPENSING_INCIDENT_FILTER_DATA, year }),
getPeriodList: () => dispatch({ type: GET_DISPENSING_INCIDENT_PERIOD_LIST }),
getTypeList: () => dispatch({ type: GET_DISPENSING_INCIDENT_TYPE_LIST }),
getOverviewData: (period, to, from, datatype) =>
dispatch({ type: GET_DISPENSING_OVERVIEW, period, from, to, datatype }),
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(DispensingIncidents);
这就是我放的时候发生的事情
console.log('Hello')
解决方案
推荐阅读
- java - java.lang.NoSuchMethodError:sun.security.ssl.SSLSessionImpl。
在 Spring、Hibernate 和 JSF 项目中使用 Java 8 在 Glassfish 上运行 - node.js - $near 错误 - 规划器返回错误:无法找到 $geoNear 查询的索引
- java - 如何设置外键为空
- r - 无法在 R 3.5.1 上安装 purrr
- r - Excel 数字日期编码 (UTC) 到日期转换
- python - 从 QTreeView 或 QListWidget 中选择 - Pyqt
- javascript - javascript自动填写表单扩展
- openproject - OpenProject webhook 未触发
- arangodb - 如何在 Web 界面中创建服务而不创建名为“xxx_xxx”而是“xxx”的集合?
- laravel-5 - 如何在 Laravel 中保存多个复选框?