React TypeScript 无法更新自定义输入文本值

尼兰加·桑达鲁万

我使用 react typescript 开发了编辑通知页面。我从数据库中获取通知标题并将该值设置为自定义输入组件,如下所示

let notificationTitle: string = "Notification Test"; // getting from db

  
  <FormInputText
    label={"Notification Title:"}
    value={notificationTitle}
    name={`notificationTitle1`}
    required={false}
    placeholder={
      "Text inside title tag - can include HTML text styles - bold, italic etc…"
    }
    labelClass={"full"}
  />

完整代码链接:https ://codesandbox.io/s/zen-aryabhata-7lfch5?file=/src/EditPage.tsx

问题:

但我无法更新输入文本框的值,并且它不断重置为从数据库传递的默认值。

反应 TypeScript 代码。

自定义输入组件

import React, {useEffect, useState} from "react";

interface Props {
    label: string;
    name: string;
    required? : boolean;
    placeholder: string;
    labelClass: string;
    value?: string;
}

const FormInputText: React.FC<Props> = ({
                                    label,name,required,placeholder,labelClass,rules,value
}) => {


    console.log("FormInputText",value);

    const [inputValue,setInputValue] = useState<string>("");


    useEffect(() => {
        if(inputValue == "" && value) {
            setInputValue(value);
        }else{
            setInputValue(inputValue);
        }

    });


    const changeHandler = (e: React.ChangeEvent<HTMLInputElement>) => {
        e.preventDefault();

        setInputValue(e.target.value);

        

    };

    return (
        <>
            <label className={labelClass}>
                <span>{label} {(required) ? <b>*</b> : <></>}</span>
                <input type="text" onChange={changeHandler} name={name}
                              placeholder={placeholder} value={inputValue}/>
            </label>

        </>



    );



}

export default FormInputText;

编辑页面

import "./styles.css";
    import FormInputText from "./inputtext.component";
    
    export default function EditPage() {
      let notificationTitle: string = "Notification Test"; // getting from db
    
      return (
        <div className="App">
          <h1>Edit Notification</h1>
          <FormInputText
            label={"Notification Title:"}
            value={notificationTitle}
            name={`notificationTitle1`}
            required={false}
            placeholder={
              "Text inside title tag - can include HTML text styles - bold, italic etc…"
            }
            labelClass={"full"}
          />
        </div>
      );
    }
李恩菲尔德

notificationTitle不是受控元素,EditPage您需要将其传递给您的FormInputText组件:

  let notificationTitle: string = "Notification Test"; // getting from db

  const [inputValue, setInputValue] = useState(notificationTitle);

代码在这里(可以进一步改进)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在React with Typescript中的类组件中创建类似于setState的自定义钩子

使用TypeScript在React Native中创建自定义组件

React-Typescript:如何输入默认道具?

在Typescript中键入自定义的react-redux connect函数

使用Typescript创建React App中的自定义代理

TypeScript React Hooks,自定义钩子类型推断问题

在Create React App中为节点模块添加自定义Typescript类型声明

React Typescript自定义挂钩:类型“ {}”上不存在属性“ prop_name”

如何测试使用自定义TypeScript React Hook的组件?

React + Typescript:复制自定义组件的道具-React.PropsWithoutRef对我不起作用

React Typescript功能组件输入

Highcharts在React TypeScript中用于地图的自定义数据?

使用自定义钩子在React Typescript中传递道具

在React Typescript中创建一个自定义按钮并添加onClick事件

TypeScript和自定义React Hook Api服务

Typescript React,如何为将自定义输入组件作为prop的组件提供类型信息?

如何在带有类的React TypeScript中生成自定义URL

输入自定义钩子React / Typescript的问题

在带有Typescript的React中创建自定义钩子而不传递道具

如何输入自定义钩子useStateWithCallback React TypeScript

TypeScript中的自定义React钩子-没有调用签名

用于 @types/react-router 的 Typescript 自定义 @types 包

Meteor(REACT) -- 无法更新输入文本值

React Typescript - 添加自定义属性

如何使用 TypeScript 键入自定义 React 选择组件?

在 React TypeScript 中输入输入的 keyup

在 React 中使用自定义钩子时,如何为文本输入设置初始值?

Typescript react-select 自定义输入组件 InputProps 类型不兼容

在 typescript 类中使用自定义 React Hooks