亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

即使在我嘗試保存時,使用 React 輸入字段也會說合成,并且設置值而不是 defaultValue

即使在我嘗試保存時,使用 React 輸入字段也會說合成,并且設置值而不是 defaultValue

米脂 2023-03-18 16:13:06
當我嘗試將更改保存到我的輸入字段時遇到問題我收到一條錯誤消息“警告:出于性能原因重用此合成事件。如果您看到此消息,則表示您正在訪問已發布/已取消的nativeEvent屬性合成事件。這被設置為空。如果您必須保留原始合成事件,請使用 event.persist()。” 此外,如果我在字段中鍵入時設置“值”而不是“默認值”,我會得到 [Object, object]。這是輸入組件:const Profile = ({  profile,  mCatalog,  sCatalog,  isEditing,  onChange,  restoreData,  userID,}) => {const updateProviderNotes = (event) => {        const { name, value } = event.target;    onChange(name)(value);  }return (          <Input            type="textarea"            disbaled={false}            name="providerNotes"            value={providerNote}            onChange={updateProviderNotes}            />      )const Editor = ({ source, onChange, items, oldItems, name }) => {  return (    <div className="d-flex ml-3">      <div className={styles.bubble}>        <ListEditor          items={items}          oldItems={oldItems || []}          itemListSource={source}          onChange={onChange(name)}        />      </div>    </div>  );};export default Profile;這是父組件的一部分const ProfileData = ({  profile,  mCatalog,  sCatalog,  page,  catalog,  userID,  setProfile,}) => {  const [editingProfile, setEditingProfile] = useState(false);  const [oldProfile, setOldProfile] = useState(false);  useEffect(() => {    setOldProfile(profile)  }, [])  const handleMProfileCancel = () => {    setProfile(oldProfile)  }  const handleMedicalProfileSave = () => {    console.log("profile", profile)    console.log(typeof profile.medicalProfile.providerNotes)    api.UserRecords.updateMedicalProfile(userID, profile.medicalProfile)    setOldProfile(profile)      }  const updateMedicalProfileDetails = (fieldName) => (value) => {        setProfile({ ...profile, mProfile: {...profile.mProfile, [fieldName]: value }});  };任何建議都會有所幫助謝謝!
查看完整描述

1 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

您基本上會收到此錯誤,因為您在不允許的異步上下文(更新狀態)中使用事件。如果將事件分配給局部變量并引用它,則可以避免此錯誤。

如果我在字段中鍵入時設置“值”而不是“默認值”,我會得到 [Object, object]

您的onChange事件處理程序將收到一個綜合事件對象和您傳遞給它的參數。使用您當前的代碼,您將整個事件對象分配為字段值。

updateMedicialProfileDetails作為onChange道具傳遞的方法不在您的問題中,因此我以該updateProfileDetails方法為例:

以下代碼應該有效:

?const updateProfileDetails = (fieldName) => (event) => {

? ? const { value } = event.target;

? ? setProfile({ ...profile, mProfile: {...profile.mProfile, [fieldName]: value }});

? };

您通過此函數傳遞的名稱參數是不必要的,因為您的事件對象將具有可用的名稱屬性,因此您的代碼可以更新為以下內容:


? <Input

? ? type="textarea"

? ? name="providerNotes"

? ? value={profile.providerNotes}

? ? onChange={onChange}

? ? oldValue={restoreData.providerNotes}

? />

事件處理程序:


? const updateProfileDetails = (event) => {

? ? const { name, value } = event.target;

? ? setProfile({ ...profile, mProfile: {...profile.mProfile, [name]: value }});

? };


查看完整回答
反對 回復 2023-03-18
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號