我有一些多个状态和函数来设置使用useState钩子的状态。
在每个setstate组件上重新渲染。我只想重新渲染完全完成的setstate函数。
例如:
应用程序内。js
const [a, setA] = useState(() => false);
const [b, setB] = useState(() => {});
const [c, setC] = useState(() => props.c);
const [d, setD] = useState(null);
const [e, setE] = useState(null);
const [f, setF] = useState(null);
const [g, setG] = useState('');
const func1 = useCallback(data => {
setA(true);
setB(true);
setC(data && data.c);
setD();
setE(isChecked ? 'a' : 'b');
}, []);
const func2 = useCallback(data => {
setA(false);
setB(false);
}, []);
const func3 = useCallback(data => {
setC(false);
setD(false);
}, []);
const events = {
func1,
func2,
func3
};
const handleMessage = e => {
const { eventName, data } = e.data;
const handleEvents = eventName ? events[toCamel(eventName)] : null;
if (handleEvents && typeof handleEvents === 'function') {
handleEvents(data);
}
};
useLayoutEffect(() => {
iframe.addEventListener('message', handleMessage, true);
return () => {
iframe.removeEventListener('message', handleMessage, true);
};
}, []);
return (
<Fragment>
{a && (
Component1
)}
{b && c && (
Component2
)}
</Fragment>
);
在每个函数1和函数2上setA和setB返回语句重新呈现元素。我不想在每个setA,setB,setC等重新渲染。一旦函数1或函数2完全完成,只需要重新渲染组件。我对钩子不熟悉,有人能帮忙吗?
您可以将所有变量存储在一个状态中,如下所示:
const [state,setState] = useState({ a:false, b:{}, c:props.c,d:null})
const func1 = useCallback(data => {
setstate({a:true,b:true,c:data && data.c,d:null})
}, []);
如果您的状态值连接非常紧密,并且希望确保所有内容都立即更新:
const [state, setState] = useState({
a: () => false,
b: () => {},
c: () => props.c,
d: null,
e: null,
f: null,
g: ''
});
const updateState = newState => setState(Object.assign({}, state, newState));
现在,当您想更新您的状态时,只需像这样使用updateState
:
const func1 = useCallback(
(data) =>
updateState({
a: true,
b: true,
c: data && data.c,
d: undefined,
e: isChecked ? 'a' : 'b',
}),
[],
);
例如,当呈现表中的长元素列表时,对的任何调用,无论是否更改表用于枚举的数据,都会导致重新呈现每个子对象。 但是如果是这样的话,当那个链接里的元素数增加到说4000的时候,为什么点击的时候会有这么多的减速呢?当使用稍微复杂一些的自定义React组件时,只使用200个项目时,会注意到显着的减速。
我有一个页面,有一个子组件用于浏览按钮,在父组件上,通过回调我用浏览文件设置状态。
问题内容: 我怎么知道我的Vaadin 7 Web应用程序何时首次启动/启动,这样我才能进行一些初始设置? 同样,我怎么知道我的Web应用程序何时结束,关闭/退出? 问题答案: Vaadin建立在Java Servlet 技术之上。“上下文”是Servlet术语中Web应用程序的技术术语。因此,这里的答案不是特定于Vaadin的,它适用于任何Servlet- 归根结底,Vaadin只是一个大型Se
我有一个Spring启动应用程序。 我已经在我的bean中实现了接口,它在它的方法中启动异步snmp服务器,并在它的方法中停止它。 除了主应用程序上下文在启动后立即停止,所以我的服务器bean也在启动后立即停止之外,所有这些都可以正常工作。 我只需要让spring上下文仅在启动shutdown hook时停止。 这不是一个web应用程序,所以我不需要,它通过启动webserver来解决这个问题,w
我有这个MySQL表 我在这里的目标是防止数据库为给定项目创建重复的。例如,具有的项目具有,但如果我再次输入,它将阻止它输入。但是,如果并且给定的,那么它应该不会有任何问题地插入它。我的问题是,如何防止每个项目重复?