即使在我尝试保存时,使用 React 输入字段也会说合成,并且设置值而不是 defaultValue 正在渲染 [Object, object]

Working with react input field says synthetic even when i try and save, and setting value instead of defaultValue is rendering [Object, object]

免责声明我是开发新手。当我尝试保存对输入字段的更改时遇到问题 我收到一条错误消息 “警告:出于性能原因,此合成事件被重用。如果您看到此消息,则表示您正在访问 released/nullified 合成事件上的 属性 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 }});
  };
 return (
{page === "medicalProfile" && (
        <InfoEditWrapper
          data={oldProfile.medicalProfile}
          onCancel={handleMedicalProfileCancel}
          onSave={handleMedicalProfileSave}
        >
          <Profile
            profile={profile.medicalProfile}
            medicalCatalog={medicalCatalog}
            surgicalCatalog={surgicalCatalog}
            onChange={updateMedicalProfileDetails}
            userID={userID}
          />
        </InfoEditWrapper>
      )}
)
export default ProfileData;

任何建议都会有帮助谢谢!

关于您的警告信息,我会参考这个question。您基本上会收到此错误,因为您在不允许的异步上下文(更新状态)中使用事件。如果将事件分配给局部变量并引用它,则可以避免此错误。

if I set the "value" instead of the "defaultValue" when I type in the field I get [Object, object]

您的 onChange 事件处理程序将接收一个合成事件对象和您传递给它的参数。使用您当前的代码,您将整个事件对象指定为字段值。

您作为 onChange 道具传递的 updateMedicialProfileDetails 方法不在您的问题中,因此我使用 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 }});
  };