如何在功能组件中使用preState和use效果?我被告知要更新类组件到功能组件,我被困在了组件的didUpdate部分
componentDidUpdate(prevProps, prevState) {
if (prevState.search !== this.state.search) {
this.getData()
}
if (prevState.finalSearch !== this.state.finalSearch) {
if (this.state.finalSearch) {
this.newData()
} else {
this.getRawData()
}
}
}
<Search
search={search}
finalSearch={finalSearch}
/>
你没有像prevState一样的类内生命周期组件,但我认为这里的答案可能会对你有所帮助,只是为了道具,让它成为状态
如何在效果上比较旧值和新值?
您必须创建您的自定义钩子usePre上一个
,请参考这里。
function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
那么你必须这样做:
const Component = (props) => {
const {search, setSearch} = useState('');
const prevSearch = usePrevious({search, setSearch});
useEffect(() => {
if(prevSearch.search !== search) {
//Your code goes here
}
}, [search])
}
所以看起来你只是使用以前的状态来避免不必要的渲染。这实际上是一个足够常见的问题,它被内置到use效应
中:
js prettyprint-override">componentDidUpdate(prevProps, prevState) {
if (prevState.count !== this.state.count) {
document.title = `You clicked ${this.state.count} times`;
}
}
变成:
useEffect(() => {
document.title = `You clicked ${count} times`;
}, [count]); // Only re-run the effect if count changes
资料来源:https://reactjs.org/docs/hooks-effect.html#tip-通过跳过效果优化性能
您的组件可能看起来像:
useEffect(() => {
getData()
if (finalSearch) {
newData()
} else {
getRawData()
}
}, [search, finalSearch]);
我正在尝试新的hooks功能,并坚持认为我的状态没有更新。 实际上,状态已更新(我可以在console.log中看到更新的值,并且我的组件会重新运行useEffect),但是useEffect方法使用我的旧状态,并仅将签名保存给第一个用户,而活动用户在状态中确实发生了更改。 我想过添加useCallback,并将我的方法移动到use效果或组件本身,但我可以设法让它工作。 状态: 这是我的效果: 这
在这个项目中,我使用了反应钩,这个片段用来改变项目的颜色主题,但有一个问题,我无法解决。常量lightTheme={...} Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eusmod tempor incidunt ut labore et dolore magna aliqua. 我的减速器:
我最近使用钩子编写了一个表组件,每次页面加载时都会有一个对后端的API调用,因此同时会显示一个加载微调器,直到有来自API的响应为止。我使用redux作为状态管理,所以当有来自API的响应时,将调度一个操作并更新状态。所以这里的问题是,通常在类组件中,我们可以使用 但是我不知道如何使用钩子实现同样的效果。我还提到了这个stackoverflow问题如何比较反应挂钩的旧值和新值使用效果? 但这个解决
如何在USESTEAT数组内推元素反应钩?这是一个老方法在反应状态吗?还是新东西? 例如。设置状态推示例?
问题内容: 当我向某个服务器发送请求时,将出现303响应,然后是请求的响应以及200状态代码。有趣的是,我只能在开发人员控制台的网络视图中看到此内容。当检查我的$ .ajax()请求的状态码和响应时,将有第二个请求的响应以及200 http状态码。 问题在于,似乎第二个请求正在缓存(尽管状态码为200),我真的需要它不可缓存。因此,我真的很想干预使用http 303状态代码进行的转发过程。我希望我
问题内容: 在带有钩子的React中,更新状态的正确方法是嵌套对象是什么? 一个人怎么会使用到的更新来(附加一个字段)? (改变价值)? 问题答案: 您可以像这样传递新值