Reactjs 如何从父组件显示和隐藏子组件中的模态?
问题:当我单击按钮Reactjs 如何从父组件显示和隐藏子组件中的模态?,reactjs,react-hooks,use-state,Reactjs,React Hooks,Use State,问题:当我单击按钮addnew时,它会显示ModalUser,然后当我再次单击它时,它不会显示。如果我刷新页面,它将再次开始工作 这就是我想要的:我想让addnew按钮反复显示ModalUser,而不是只显示一次。我怎么做 index.js import React,{useState} from 'react' import ModalUser from "./ModalUser"; function Main(){ const [show, setShow] = u
addnew
时,它会显示ModalUser
,然后当我再次单击它时,它不会显示。如果我刷新页面,它将再次开始工作
这就是我想要的:我想让addnew
按钮反复显示ModalUser
,而不是只显示一次。我怎么做
index.js
import React,{useState} from 'react'
import ModalUser from "./ModalUser";
function Main(){
const [show, setShow] = useState(false);
const handleShow = () => setShow(true);
return (
<Button variant="primary" onClick={handleShow}>Add new</Button>
<ModalUser message="hei you" show={show} header="info" />
)
}
import React, {useState,useEffect} from 'react'
import { Modal, Button } from "react-bootstrap";
function ModalUser(props){
const [show, setShow] = useState(false);
const handleClose = () => setShow(false);
useEffect(() => {
setShow(props.show);
},[props.show]);
return (
<>
<Modal show={show} onHide={handleClose}>
<Modal.Header closeButton>
<Modal.Title>{props.header}</Modal.Title>
</Modal.Header>
<Modal.Body>{props.message}</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={handleClose}>
Close
</Button>
<Button variant="primary" onClick={handleClose}>
Save Changes
</Button>
</Modal.Footer>
</Modal>
</>
)
}
import React,{useState}来自“React”
从“/ModalUser”导入ModalUser;
函数Main(){
const[show,setShow]=useState(false);
常量handleShow=()=>setShow(true);
返回(
新增
)
}
ModalUser.js
import React,{useState} from 'react'
import ModalUser from "./ModalUser";
function Main(){
const [show, setShow] = useState(false);
const handleShow = () => setShow(true);
return (
<Button variant="primary" onClick={handleShow}>Add new</Button>
<ModalUser message="hei you" show={show} header="info" />
)
}
import React, {useState,useEffect} from 'react'
import { Modal, Button } from "react-bootstrap";
function ModalUser(props){
const [show, setShow] = useState(false);
const handleClose = () => setShow(false);
useEffect(() => {
setShow(props.show);
},[props.show]);
return (
<>
<Modal show={show} onHide={handleClose}>
<Modal.Header closeButton>
<Modal.Title>{props.header}</Modal.Title>
</Modal.Header>
<Modal.Body>{props.message}</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={handleClose}>
Close
</Button>
<Button variant="primary" onClick={handleClose}>
Save Changes
</Button>
</Modal.Footer>
</Modal>
</>
)
}
import React,{useState,useffect}来自“React”
从“react bootstrap”导入{Modal,Button};
功能调节器(道具){
const[show,setShow]=useState(false);
const handleClose=()=>setShow(false);
useffect(()=>{
布景(道具表演);
},[props.show]);
返回(
{props.header}
{props.message}
接近
保存更改
)
}
将关闭回调传递给Modal组件,并删除Modal中的本地显示状态
setShow(false)}header=“info”/
const handleClose=()=>props.close();
您可以
show
状态将由父组件拥有。父级将show
和toggleShow
功能传递给子级,以访问和更改父级中的show
状态
父组件,index.js:
function Main(){
const [show, setShow] = useState(false);
const toggleShow = () => setShow(p => !p);
return (
<Button variant="primary" onClick={toggleShow}>Add new</Button>
<ModalUser message="hei you" show={show} toggleShow={toggleShow} header="info" />
)
}
const {show, toggleShow} = props
<Modal show={show} onHide={toggleShow}>
<Modal.Header closeButton>
<Modal.Title>{props.header}</Modal.Title>
</Modal.Header>
<Modal.Body>{props.message}</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={toggleShow}>
Close
</Button>
<Button variant="primary" onClick={toggleShow}>
Save Changes
</Button>
</Modal.Footer>
</Modal>
函数Main(){
const[show,setShow]=useState(false);
const-toggleShow=()=>setShow(p=>!p);
返回(
新增
)
}
和模态组件中的ModalUser.js:
function Main(){
const [show, setShow] = useState(false);
const toggleShow = () => setShow(p => !p);
return (
<Button variant="primary" onClick={toggleShow}>Add new</Button>
<ModalUser message="hei you" show={show} toggleShow={toggleShow} header="info" />
)
}
const {show, toggleShow} = props
<Modal show={show} onHide={toggleShow}>
<Modal.Header closeButton>
<Modal.Title>{props.header}</Modal.Title>
</Modal.Header>
<Modal.Body>{props.message}</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={toggleShow}>
Close
</Button>
<Button variant="primary" onClick={toggleShow}>
Save Changes
</Button>
</Modal.Footer>
</Modal>
const{show,toggleShow}=props
{props.header}
{props.message}
接近
保存更改
我个人建议提取上述状态,并为开放状态提供一个真相来源
//index.js
import React,{useState} from 'react'
import ModalUser from "./ModalUser";
function Main(){
const [show, setShow] = useState(false);
const handleShow = () => setShow(true);
return (
<Button variant="primary" onClick={handleShow}>Add new</Button>
<ModalUser message="hei you" show={show} header="info" setShow={setShow} />
)
}
//ModelUser.js
import React, {useState,useEffect} from 'react'
import { Modal, Button } from "react-bootstrap";
function ModalUser(props){
const handleClose = () => props.setShow(false);
return (
<>
<Modal show={show} onHide={handleClose}>
<Modal.Header closeButton>
<Modal.Title>{props.header}</Modal.Title>
</Modal.Header>
<Modal.Body>{props.message}</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={handleClose}>
Close
</Button>
<Button variant="primary" onClick={handleClose}>
Save Changes
</Button>
</Modal.Footer>
</Modal>
</>
)
}
//index.js
从“React”导入React,{useState}
从“/ModalUser”导入ModalUser;
函数Main(){
const[show,setShow]=useState(false);
常量handleShow=()=>setShow(true);
返回(
新增
)
}
//ModelUser.js
从“React”导入React,{useState,useEffect}
从“react bootstrap”导入{Modal,Button};
功能调节器(道具){
const handleClose=()=>props.setShow(false);
返回(
{props.header}
{props.message}
接近
保存更改
)
}
试试,然后回复我
import React, {useState,useEffect} from 'react'
import { Modal, Button } from "react-bootstrap";
function ModalUser(props){
const [show, setShow] = useState(false);
const handleClose = () => setShow(false);
useEffect(() => {
setShow(!props.show);
},[props.show]);
return (
<>
<Modal show={show} onHide={handleClose}>
<Modal.Header closeButton>
<Modal.Title>{props.header}</Modal.Title>
</Modal.Header>
<Modal.Body>{props.message}</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={handleClose}>
Close
</Button>
<Button variant="primary" onClick={handleClose}>
Save Changes
</Button>
</Modal.Footer>
</Modal>
</>
)
}
import React,{useState,useffect}来自“React”
从“react bootstrap”导入{Modal,Button};
功能调节器(道具){
const[show,setShow]=useState(false);
const handleClose=()=>setShow(false);
useffect(()=>{
设置显示(!props.show);
},[props.show]);
返回(
{props.header}
{props.message}
接近
保存更改
)
}
最可能的不一致行为是由于您的双重状态、删除本地模态状态和仅传递道具状态,在这种情况下,您不需要模态内部状态,传递show和setShow到模态,props.setShow(false)}>{…}