我有这个组件,它需要获取数据,将其设置为状态,然后将其传递给子项。一些数据也需要在上下文中设置。我的问题是使用 useEffect,一旦调用 API,它将为我需要执行的每个 setvalue() 函数重新渲染。我尝试将一个空的 [] 数组传递给 useEffect,但由于状态正在改变,仍然获得相同数量的重新渲染。目前该数组包含 set...functions 以防止 eslint 抛出警告。
有没有更好的方法来避免这么多次重新渲染?
const Home = (props) => {
console.log("TCL: Home -> props", props);
const classes = useStyles();
const [value, setValue] = React.useState(0);
//CONTEXT
const { listSavedJobs, setListSavedJobs, setIsFullView} = useContext(HomeContext);
const {
setUserName,
setUserLastName,
setUserEmail,
setAvatarProfile,
} = useContext(UserContext);
// STATE
const [searchSettings, setSearchSettings] = useState([]);
const [oppData, setOppData] = useState([]);
const handleChange = (event, newValue) => {
setValue(newValue);
};
const handleChangeIndex = index => {
setValue(index);
};
//API …Run Code Online (Sandbox Code Playgroud) 如标题所示,目前我已将我的应用程序配置为每次执行 git Push 时运行测试,
"husky": {
"hooks": {
"pre-push": "npm run test:unit"
}
}
Run Code Online (Sandbox Code Playgroud)
但显然它的扩展性不好,测试越多,推送所需的时间就越长,那么有没有一种方法可以仅在文件发生更改时才触发测试?
最终我发现 Jest 有一个很好的标志叫做--changedSince
,所以你可以在你的 package.json 文件中包含类似这样的东西:
"test:unit": "test:unit --changedSince=@{push}"
只会执行自上次推送以来已更改的文件的测试,与远程 HEAD 进行比较