【发布时间】:2021-12-19 06:44:42
【问题描述】:
我正在制作表单组件。(它是功能组件)
它是不受控制的组件,因为我不想在Input 组件中进行不必要的渲染。
但它有一个意想不到的词。
-
我尝试在
Input组件中使用setState()设置值并通过值道具onChange。它不是将整个值从Input传递到Form -
我不想要不必要的渲染。但是,当我在电子邮件中输入值时,会同时使用密码对渲染做出反应。
我该如何解决这个问题?
代码沙盒链接 https://codesandbox.io/s/makewelldonecomponents-txxl0?file=/src/Input.js
或代码
(输入组件)
import React, { useEffect, useState } from "react";
const Input = ({ type, placeholder, onChange }) => {
const [value, setValue] = useState("");
function handleChange(e) {
setValue(e.target.value);
onChange(value);
}
return (
<>
{console.log("render", placeholder)}
<input placeholder={placeholder} value={value} onChange={handleChange} />
</>
);
};
export default Input;
(表单组件)
import React, { useState, useEffect } from "react";
import Input from "./Input";
const Form = () => {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [state, setState] = useState(0);
function handleSubmit(e) {
e.preventDefault();
console.log(email, password);
}
function handleEmail(value) {
setEmail(value);
console.log(value);
}
function handlePassword(value) {
setPassword(value);
}
function handleReset(e) {
setEmail("");
setPassword("");
setState(state + 1);
}
return (
<form onSubmit={handleSubmit}>
<Input
key={state + "email"}
type="email"
placeholder="이메일"
onChange={handleEmail}
/>
<Input
key={state + "password"}
type="password"
placeholder="비밀번호"
onChange={handlePassword}
/>
<button type="submit">가입</button>
<button type="button" onClick={handleReset}>
초기화
</button>
</form>
);
};
export default Form;
【问题讨论】:
标签: reactjs react-functional-component