我正在使用GraphQL和Apollo建立一個具有React前端的網站。我創建了一個頁面,網站管理員可以在頁面的特定部分更新內容,它可以工作,但是我一直在控制台中收到錯誤:元件正在將受控輸入更改為非受控輸入...
我還使用了ReactQuill所見即所得編輯器。我以為這可能是問題所在,但我已經將它刪除了,但仍然收到相同的錯誤。
這是內容更新頁面的程式碼:
import { useState, useEffect } from 'react'; import { useMutation, useQuery } from '@apollo/client'; import { useNavigate, useParams } from 'react-router-dom'; import { GET_CONTENT_BY_ID } from '../../utils/queries'; import { UPDATE_CONTENT } from '../../utils/mutations'; import Form from 'react-bootstrap/Form'; import Button from 'react-bootstrap/Button'; import ReactQuill from 'react-quill'; import 'react-quill/dist/quill.snow.css'; const Content = () => { const { id } = useParams(); const { loading, data } = useQuery(GET_CONTENT_BY_ID, { variables: { id: id }, }); const [contentHead, setContentHead] = useState(''); const [contentText, setContentText] = useState(''); useEffect(() => { const content = data?.contentById || {}; if (content) { setContentHead(content.contentHead); setContentText(content.contentText); } }, [data, setContentHead, setContentText]); const [updateContent, { error }] = useMutation(UPDATE_CONTENT); const navigate = useNavigate(); const submitHandler = async (e) => { e.preventDefault(); try { const { data } = await updateContent({ variables: { id, contentHead, contentText, }, }); navigate('/_admin'); } catch (error) { console.log(error); } }; return ( <Form onSubmit={submitHandler}> <Form.Group className="mb-3" controlId="contentHead"> <Form.Label>Section Heading</Form.Label> <Form.Control value={contentHead} onChange={(e) => setContentHead(e.target.value)} required /> </Form.Group> <Form.Group className="mb-3" controlId="contentText"> <Form.Label>Text</Form.Label> <ReactQuill name="contentText" value={contentText} theme="snow" onChange={setContentText} /> </Form.Group> <Button type="submit">Submit</Button> </Form> ); }; export default Content;
在ReactQuill中,我嘗試了onChange={(e) => contentText(e.target.value)},但沒有任何變化。現在的方式是我從他們的git儲存庫中得到的。
我在這裡的另一個問題中找到了答案。雖然它不是被接受的答案,但它可以解決錯誤。
在ReactJS中,元件正在將未控制的文字輸入更改為受控錯誤
#所以對於我的表單,我將value={contentHead}和value={contentText}改為value={contentHead || ''}和value={contentText || ''},這樣就可以解決錯誤了!