ステートレス入力に対応するカスタムフォームの作成
9875 ワード
導入
このような何かを見た?
この記事では、この問題を解決しようとしています.だから始めましょう!
問題
その入力の各々の管理された状態で大きい形を作るその退屈な仕事.10の分野で形を想像してください🤯
親要素に入力要素を含めることができ、それらの状態を1つの真理のもとで管理することができればどうなるでしょうか?それは素晴らしい権利でしょう.親コンポーネントをビルドできます!
解決策
反応コンポーネントを作成して
Form
と入力要素を子要素として渡します.リコールするには、コンポーネントの子はchildren
子プロセスの配列であるコンポーネントのプロップです.我々ならば
console.log
中の各子Form
コンポーネントのように見えます今、私たちはからの出力を望む
Form
コンポーネントのJavaScriptObject
フィールド名とそれらのそれぞれの入力値に対応するキー値組の形で.我々が変わることができるならば
value
プロップとハンドルonChange
要素のプロップは、我々の使命を達成する!でも待ちます.どのようにマッピング中に知っているか、どのようなfieldnameですか?そしてどこでどのように変更するときに入力のデータを格納するには?
この問題を解決するために、私たちは
key
(別の空想要素のデフォルトの小道具はその使用をチェックしますhere . ここでフィールド名を示すためにキーを使います.また、2余分な小道具を渡す
formData
& setFormData
) インForm
コンポーネントimport { useState } from "react";
import Form from "./Form";
import "./styles.css";
export default function App() {
const [formData, setFormData] = useState(null)
return (
<div className="App">
<Form setFormData={setFormData} formData={formData}>
<input key='name' placeholder='Enter name' />
<input key='email' placeholder='Enter email' />
<input key='phoneNumber' placeholder='Enter phone' />
<input key='address' placeholder='Enter address' />
</Form>
<button onClick={() => console.log(formData)}>Submit</button>
</div>
);
}
にForm
コンポーネントをマッピングして新しい配列を作成しますchildren
配列を変更し、props
フィールド.value
要素のformData
変数とonChange
関数は、child.key
) そして、formData
経由setFormData
export default function Form({ children, formData, setFormData }) {
const handleInputChange = (key, text) => {
let newFormData = { ...formData }
newFormData[key] = text
setFormData(newFormData)
}
const mappedChildren = children.map(child => {
return {
...child,
props: {
...child.props,
onChange: e => handleInputChange(child.key, e.target.value),
value: formData ? formData[child.key] : ''
}
}
})
return (
<section>
{mappedChildren}
</section>
)
}
コンポーネントが完了し、ログによって作業をチェックしますformData
コンソールで動く!
Reference
この問題について(ステートレス入力に対応するカスタムフォームの作成), 我々は、より多くの情報をここで見つけました https://dev.to/kuvamdazeus/creating-custom-forms-in-react-with-stateless-inputs-2k8kテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol