У меня есть этот
const Parent = () => {
[modalOpen, setModal] = React.useState(false);
return <Child
open={modalOpen}
closeModal={() => setModal(false)}
functionFromParent={() => console.log('Logged')} />
}
и этот
const Child = ({ functionFromStore, functionFromParent, closeModal }) => {
async function foo() {
try {
await ...;
functionFromStore();
functionFromParent();
} catch (error) {
....
}
}
const bar = () => {
foo();
closeModal();
}
return <div
style={{backgroundColor: 'hotpink', width: '10rem', height: '10rem' }}
onClick={() => bar()}/>
}
компонент.
<Parent />
решает, является ли <Child />
(это Модал ) показан или нет. <Child />
имеет три функции, closeModal()
и functionFromParent()
, исходя из <Parent/ >
. И functionFromStore()
идет от redux
до dispatchToProps()
. Ради простоты я оставил все вещи connect(stateToProps, dispatchToProps)(...)
. Но давайте предположим, что <Child />
напрямую связан с store
.
Нажатие на <div />
в <Child/>
выполняет bar()
. Это вызывает от <Child />
до unmount
, потому что closeModal()
в <Parent />
вызывается, закрывая модальный . Однако bar()
также вызывает foo()
, являясь async
функцией.
Когда разрешен await
, вызывается functionFromStore()
, но не functionFromParent()
. Интересно, почему это? Почему вызывается функция из store
, даже если компонент (<Child />
) размонтирован, а функция не из родительского?
Кроме того, есть ли способ вызвать functionFromParent()
, даже когда <Child />
размонтирован? Как-то работает с functionFromStore()
, есть ли способ заставить его работать с functionFromParent()
?