簡體   English   中英

React onChange 事件不會在自定義輸入上觸發

[英]React onChange event will not fire on custom Input

我有一個像這樣的自定義輸入組件:

import * as React from "react";

const Input = (props) => {
  
  return (
    <input
      type={props.type}
      name={props.name}
      className={props.className}
      value={props.value}
      onChange={props.onChange}
    />
  );
};
export default Input;

我正在嘗試處理 onChange 事件,但它不會在這里觸發:

import Input from "../../Components/Input";
...
<Input
  type="text"
  onChange={e => console.log(`${e.target.value}`)}
  id="subject"
  className="rounded-sm px-4 py-3 mt-3 focus:outline-none w-full border bg-transparent border- 
    gray-300"
  placeholder="Subject"
/>

我嘗試通過道具將事件傳遞給自定義輸入,並嘗試直接在 Input 組件中處理事件。

使用 useState 更改 state 的所需行為:

const [subject, setSubject] = useState('');
...
onChange={e => setSubject(e.target.value)}

當我添加這些行時,輸入變為只讀

如果您使用像 Input 這樣的自定義組件,則必須指定所有道具,如您所見,您正在為 Input 組件提供 onChange 道具,而無需將其傳遞給輸入標簽。

import * as React from "react";

const Input = (props) => {
  
  return (
    <input
      type={props.type}
      name={props.name}
      className={props.className}
      value={value}
      onChange={props.onChange}
    />
  );
};
export default Input;

您需要處理來自Input組件的onChange() 否則,它不會直接觸發。

import * as React from "react";
const Input = (props) => {
  return (
    <input
       type={props.type}
       name={props.name}
       className={props.className}
       value={value}
       onChange={ev => props.onChange}
    />
 );
};
export default Input;

請試試這個。 您可以將 state 輸入到父組件中,並相應地從子組件更新。

輸入.js

import * as React from "react";

const Input = (props) => {
  
  return (
    <input
      type={props.type}
      name={props.name}
      className={props.className}
      value={props.value}
      onChange={e => props.handleInputData(e.target.value)}

    />
  );
};
export default Input;

第二部分

import React from 'react'

export default function secondComponent() {
  const [inputData,handleInputData] = useState("");
  return (
    <div>
      <Input
        type="text"
        id="subject"
        className="rounded-sm px-4 py-3 mt-3 focus:outline-none w-full border bg-transparent border- 
          gray-300"
        placeholder="Subject"
        handleInputData={handleInputData}
        value={inputData}
      />
    </div>
  )
}

在您的 Input 組件中,您沒有在任何地方使用傳遞的 onChange,這就是它沒有啟動的原因

<Input
  .
  .
  .
  onChange={props.onChange}
/>

另外,重要的一步,該值應該是 useEffect 的useEffect作為updater 如果你不這樣做,該值將不會更新,它將是readonly

所以,傳遞 props 如下:

const [subject, setSubject] = useState('');

<Input
  .
  .
  value={subject}
  onChange={e => setSubject(e.target.value)}
/>

感謝您的建議,

React package 已過時,運行更新似乎解決了我的問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM