標題重寫為:組件正在將受控輸入轉變為非受控輸入
P粉587970021
P粉587970021 2023-09-10 11:52:04
0
1
680

我正在使用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儲存庫中得到的。

P粉587970021
P粉587970021

全部回覆(1)
P粉044526217

我在這裡的另一個問題中找到了答案。雖然它不是被接受的答案,但它可以解決錯誤。

在ReactJS中,元件正在將未控制的文字輸入更改為受控錯誤

#所以對於我的表單,我將value={contentHead}和value={contentText}改為value={contentHead || ''}和value={contentText || ''},這樣就可以解決錯誤了!

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板