#reactjs
Вопрос:
Я хотел бы, когда я открываю модальный, запускать службу только в том случае, если модальный открыт, и повторно использовать данные службы для другой инъекции в другой компонент.
Вот компонент :
import React from 'react';
import { Modal } from 'react-bootstrap';
import FormResolveDispute from '../forms/form-resolve-dispute';
import { useGetAllMovementsByTiersQuery } from '../../services/EventApi';
const ModalResolveEvent = (props: any) => {
const {show, onClose, dispute} = props;
if (show) {
const {mouvement} = useGetAllMovementsByTiersQuery(
{
qp: new URLSearchParams({
eventId: dispute.id,
}).toString(),
},
{
selectFromResult: ({data}) => ({
movement: data?.items || [],
}),
}
);
return data;
}
return (
<>
<Modal show={show} onHide={onClose} centered={true} scrollable={true}>
<Modal.Header closeButton>
<Modal.Title className="text-title">
Test
</Modal.Title>
</Modal.Header>
<Modal.Body>
<FormResolveDispute
mvts={mouvement}
submitCallback={onClose}
/>
</Modal.Body>
</Modal>
</>
);
};
export default ModalResolveEvent;
здесь я проверяю, стоит ли show
true
звонить
if (show) {
const {movement} = useGetAllMovementsByTiersQuery(
{
qp: new URLSearchParams({
eventId: dispute.id,
}).toString(),
},
{
selectFromResult: ({data}) => ({
movement: data?.items || [],
}),
}
);
return movement;
}
и я хотел бы внедрить движение в FormResolveDispute
компонент.
<FormResolveDispute mvts={movement} submitCallback={onClose} />
Но у меня есть следующее сообщение об ошибке
TS2304: Cannot find name 'movement'.
Я хотел бы получить движение, сгенерированное в кондитонале, чтобы отправить его обратно в FormResolveEvent
Не могли бы вы сказать мне, в чем проблема или есть ли другой способ ?
Комментарии:
1.
TS2304: Cannot find name 'movement'.
Это потому, что движение находится внутри области, которую вы должны осознавать. На мой взгляд, вы можете сохранить движение до состояния.2. @edhi.uchiha Спасибо за ваш ответ, но как реализовать это изменение ?
Ответ №1:
Пожалуйста, попробуйте это.
// create initial state
const [movement, setMovement] = useState([]);
if (show) {
const { movement } = useGetAllMovementsByTiersQuery(
{
qp: new URLSearchParams({
eventId: dispute.id,
}).toString(),
},
{
selectFromResult: ({data}) => ({
movement: data?.items || [],
}),
}
);
// set state
setMovement(movement);
}
Таким образом, в этом компоненте реквизит движения-это получить из состояния
<FormResolveDispute
mvts={movement}
submitCallback={onClose}
/>
Комментарии:
1. спасибо за ответ, но модификация выдает мне сообщение об ошибке: крючок реакции» useGetAllMovementsByTiersQuery » не может быть вызван внутри обратного вызова. Крючки реакции должны вызываться в компоненте функции реакции или пользовательской функции крюка реакции. Я думаю, что крючок реакции нельзя использовать в условных
2. Вы используете класс или функциональный компонент ?
3. функциональный компонент
4. хм, но проблема не в том, что крючок используется в условном