Если я правильно понимаю, вы управляете модальным с помощью крюка useState
. Если это так, ваша проблема связана с тем, какие реквизиты вы передаете компоненту AddNewModal
.
Вы правильно создаете ловушку с помощью:
const [show, setShow] = useState(false);
Однако вы передача неправильного реквизита компоненту AddNewModal
. Вы передаете setShow
и show
, поступающие из реквизита в компоненте MouseContainer
, здесь:
<p>{show && <AddNewModal show={props.show} setShow={props.setShow} />}</p>
Однако, чтобы использовать ловушку, вы должны передать объявленные вами переменные:
<p>{show && <AddNewModal show={show} setShow={setShow} />}</p>
Я не знаком с фреймворком bootstrap, но я думаю, что опора show
модального компонента контролирует, показывается модал или нет. В этом случае вы также можете удалить условный рендер, в результате чего:
<AddNewModal show={show} setShow={setShow} />
Вот ваш обновленный код для компонента MouseContainer
:
import React, { useState } from 'react';
import AddNewModal from './AddNewModal';
const MouseContainer = (props) => {
const [show,setShow] = useState(false);
const toggle = () => setShow(!show);
return (
<div>
<button onClick={()=>setShow(!show)}>Toggle</button>
<AddNewModal show={show} setShow={setShow} />
</div>
)
}
Кроме того, у вас есть маленький тип в AddNewModal
:
Чтобы сразу получить требуемые поля реквизитов в объявлении функционального компонента, необходимо использовать деструктуризацию объекта [1], для этого используйте фигурные скобки:
const AddNewModal = ({ show, setShow }) => {
При этом вы не объявляете объект props
, как в компоненте MouseContainer
. Таким образом, вы не можете использовать его внутри функции.
Вот вам обновление AddNewModal
:
import React, {useState} from 'react';
import { Modal, Button } from 'react-bootstrap';
import AddNewForm from './AddNewForm';
const AddNewModal = ({ show, setShow }) => {
return (
<div>
<Modal show={show} setShow={setShow}>
<Modal.Header>
<Modal.Title>Modal heading</Modal.Title>
</Modal.Header>
<Modal.Body><AddNewForm/></Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={() => setShow(!show)}>
Cancel
</Button>
</Modal.Footer>
</Modal>
</div>
)
}
Источники:
[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment