TypeError: addTicket is not a function - UseState in modal to print in another page
TypeError: addTicket is not a function - UseState in modal to print in another page
我在使用 useState 挂钩时遇到了一些问题,我不明白为什么这不起作用。
我正在构建一个简单的票务系统,每当用户点击一个按钮时,它都会打开一个模式,用户可以写下关于他们的问题的内容。
我在将此模态数据显示在另一个页面上时遇到问题,用户可以在该页面上看到所有工单,例如列表。
如果我执行 console.log 我可以看到用户输入,但如果尝试将其打印到页面本身,则它不起作用。
抛出一个错误 TypeError: addTicket is not a function
最后,我想以一种格式(ID - 标题 - 状态)显示模态信息,我该如何处理 id 部分,以便它在每次提交事件时迭代自身?
非常感谢!
列表页面代码
const Home = () => {
const [showModal, setShowModal] = useState(false);
const openModal = () => {
setShowModal(prev => !prev)
}
const[tickets, setTickets] = useState([]);
const addTicket = ( title ) =>{
setTickets([...tickets, { title }])
}
return(
<>
<PageContainer>
<HeaderContainer>
<img src={ gugale } alt="logo-left"/>
<img src={ logo } alt="logo-right"/>
</HeaderContainer>
<TicketsContainer>
<CreateTicketModal showModal={ showModal } setShowModal= { setShowModal }/>
<TicketsTop>
<p>Seus tickets</p>
<button onClick={openModal}>Novo ticket</button>
</TicketsTop>
<TicketTitles>
<p>ID</p>
<p>Título</p>
<p>Status</p>
</TicketTitles>
<TicketsInfo>
{ tickets.map(ticket => {
<p> {ticket.name} </p>
})}
</TicketsInfo>
</TicketsContainer>
</PageContainer>
<GlobalStyle/>
</>
)
}
模式页面上的代码
const CreateTicketModal = ({showModal, setShowModal, addTicket}) => {
const [ title, setTitle] = useState("");
const handleName = (e) => {
setTitle(e.target.value);
}
const handleSubmit = (e) => {
e.preventDefault();
addTicket(title);
}
return (
<>
{showModal ? (
<Background showModal={showModal}>
<ModalWrapper>
<ModalHeader>
<p className="createNew" >Criar Novo Ticket</p>
<button className="closebtn" onClick={() => setShowModal(prev => !prev)}><FiX className="icon"></FiX></button>
</ModalHeader>
<form onSubmit={ handleSubmit } >
<p className="ticketTitle">Título</p>
<input type="text" name="ticketInput" placeholder="Escreva uma breve descrição sobre o problema" required onChange={ handleName } className="titleInput"/>
<p className="dscptTitle">Descrição</p>
<textarea type="text" name="dscpInput" placeholder="Escreva detalhadamente a sua solicitação..." className="dscpInput"/>
<p className="anex">Anexos</p>
<p className="anexDscp">Envie-nos arquivos, imagens ou textos que possam contribuir para a verificação da solicitação</p>
<Anex>
<FiUploadCloud className="anexCloud"></FiUploadCloud>
<p>Arraste e solte arquivos aqui ou</p>
<button>Selecione aqui</button>
</Anex>
<button addTicket={ addTicket }className="addTkt">Adicionar ticket</button>
</form>
</ModalWrapper>
<GlobalStyle/>
</Background>
): null}
</>
)
}
我认为您没有将 addTicket
函数作为 prop 传递给 CreateTicketModal
组件
<CreateTicketModal showModal={showModal} setShowModal= {setShowModal} addTicket={addTicket} />
您需要将 addTicket 作为 props 传递给模态组件 <CreateTicketModal addTicket={addTicket} ... />
才能在子组件中访问它。
我在使用 useState 挂钩时遇到了一些问题,我不明白为什么这不起作用。
我正在构建一个简单的票务系统,每当用户点击一个按钮时,它都会打开一个模式,用户可以写下关于他们的问题的内容。
我在将此模态数据显示在另一个页面上时遇到问题,用户可以在该页面上看到所有工单,例如列表。
如果我执行 console.log 我可以看到用户输入,但如果尝试将其打印到页面本身,则它不起作用。
抛出一个错误 TypeError: addTicket is not a function
最后,我想以一种格式(ID - 标题 - 状态)显示模态信息,我该如何处理 id 部分,以便它在每次提交事件时迭代自身?
非常感谢!
列表页面代码
const Home = () => {
const [showModal, setShowModal] = useState(false);
const openModal = () => {
setShowModal(prev => !prev)
}
const[tickets, setTickets] = useState([]);
const addTicket = ( title ) =>{
setTickets([...tickets, { title }])
}
return(
<>
<PageContainer>
<HeaderContainer>
<img src={ gugale } alt="logo-left"/>
<img src={ logo } alt="logo-right"/>
</HeaderContainer>
<TicketsContainer>
<CreateTicketModal showModal={ showModal } setShowModal= { setShowModal }/>
<TicketsTop>
<p>Seus tickets</p>
<button onClick={openModal}>Novo ticket</button>
</TicketsTop>
<TicketTitles>
<p>ID</p>
<p>Título</p>
<p>Status</p>
</TicketTitles>
<TicketsInfo>
{ tickets.map(ticket => {
<p> {ticket.name} </p>
})}
</TicketsInfo>
</TicketsContainer>
</PageContainer>
<GlobalStyle/>
</>
)
}
模式页面上的代码
const CreateTicketModal = ({showModal, setShowModal, addTicket}) => {
const [ title, setTitle] = useState("");
const handleName = (e) => {
setTitle(e.target.value);
}
const handleSubmit = (e) => {
e.preventDefault();
addTicket(title);
}
return (
<>
{showModal ? (
<Background showModal={showModal}>
<ModalWrapper>
<ModalHeader>
<p className="createNew" >Criar Novo Ticket</p>
<button className="closebtn" onClick={() => setShowModal(prev => !prev)}><FiX className="icon"></FiX></button>
</ModalHeader>
<form onSubmit={ handleSubmit } >
<p className="ticketTitle">Título</p>
<input type="text" name="ticketInput" placeholder="Escreva uma breve descrição sobre o problema" required onChange={ handleName } className="titleInput"/>
<p className="dscptTitle">Descrição</p>
<textarea type="text" name="dscpInput" placeholder="Escreva detalhadamente a sua solicitação..." className="dscpInput"/>
<p className="anex">Anexos</p>
<p className="anexDscp">Envie-nos arquivos, imagens ou textos que possam contribuir para a verificação da solicitação</p>
<Anex>
<FiUploadCloud className="anexCloud"></FiUploadCloud>
<p>Arraste e solte arquivos aqui ou</p>
<button>Selecione aqui</button>
</Anex>
<button addTicket={ addTicket }className="addTkt">Adicionar ticket</button>
</form>
</ModalWrapper>
<GlobalStyle/>
</Background>
): null}
</>
)
}
我认为您没有将 addTicket
函数作为 prop 传递给 CreateTicketModal
组件
<CreateTicketModal showModal={showModal} setShowModal= {setShowModal} addTicket={addTicket} />
您需要将 addTicket 作为 props 传递给模态组件 <CreateTicketModal addTicket={addTicket} ... />
才能在子组件中访问它。