我实际上是React的新手,无法选择在这种情况下存储数据的最佳方法是什么: 我有一个带有一些输入的表单,我需要在提交时对这些输入中的所有数据执行一些操作。 所有输入都存储在一个组件中。 所以,我只需要提交所有数据。而现在我正在尝试选择存储这些数据的最佳方式。我看到两种方式:
在州内存储数据。但正如React Docs所描述的那样:
“只有需要渲染的数据才能存储在州内。”
但是我不需要这些数据用于渲染,我只需要在提交时使用它。
存储为类变量。它对我来说很好,因为当我 使用状态,我需要调用setState(),它触发渲染(我 不需要),或者this.state.data = ....但是React Docs说:
“您可以仅在构造函数中直接更改状态。”
那么,哪种方式更好,为什么?
答案 0 :(得分:3)
我认为你过度思考它,只需坚持使用受控组件并通过州管理表单数据。
但是,如果您真的不想使用受控组件,因为您不希望调用渲染方法,那么您就不必这样做了。
这是因为表单元素与React中的其他DOM元素的工作方式略有不同,因为在HTML中,表单元素如android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.t.t"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:customtabs:26.1.0'
implementation 'com.github.bumptech.glide:glide:4.5.0'
implementation 'com.android.support:design:26.1.0'
implementation 'com.google.firebase:firebase-database:11.8.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
apply plugin: 'com.google.gms.google-services'
,<input>
和<textarea>
自然维护自己的状态并根据用户输入进行更新。 See official forms docs
而React并没有把它从你那里拿走。这意味着您可以像使用vanilla JS一样使用表单。
另外值得一提的是,在React世界中,这种将数据完全由DOM处理而不是使用React Component处理的方式称为 Uncontrolled Component 。
<强>实施强>
就实际情况而言,我可以想到两种方法,一种方法是 <select>
:
refs
另一种方式是通过handleSubmit = (e) => {
e.preventDefault();
console.log(this.input.value); // whatever you typed into the input
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<input type="text" name="name" ref={input => this.input = input} />
<input type="submit" value="submit" />
</form>
);
}
对象:
event
答案 1 :(得分:0)
答案 2 :(得分:0)
对于存储处方集,我肯定会选择在州内存储数据,如果你查看React form official documentation他们会解释我认为你的情况。
据我所知,你会看到最多的标准是:
{{1}}
看看我为你做的JSFiddle!并在发送输入时检查您的控制台。
答案 3 :(得分:0)
这个问题刚刚出现在Google搜索中,所以我认为我建议使用Formik https://github.com/jaredpalmer/formik
它非常健壮和高效+如果您不希望在redux存储中使用表单状态,它也很好