在React中存储数据

时间:2018-01-20 13:45:22

标签: javascript reactjs react-native

我实际上是React的新手,无法选择在这种情况下存储数据的最佳方法是什么: 我有一个带有一些输入的表单,我需要在提交时对这些输入中的所有数据执行一些操作。 所有输入都存储在一个组件中。 所以,我只需要提交所有数据。而现在我正在尝试选择存储这些数据的最佳方式。我看到两种方式:

  • 在州内存储数据。但正如React Docs所描述的那样:

      

    “只有需要渲染的数据才能存储在州内。”

    但是我不需要这些数据用于渲染,我只需要在提交时使用它。

  • 存储为类变量。它对我来说很好,因为当我 使用状态,我需要调用setState(),它触发渲染(我 不需要),或者this.state.data = ....但是React Docs说:

      

    “您可以仅在构造函数中直接更改状态。”

那么,哪种方式更好,为什么?

4 个答案:

答案 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)

您可能想查看redux-form。它是表单验证的绝佳工具!

开始使用它有点挑战,但是一旦掌握了它就会非常顺利。

此外,文档也很棒。

答案 2 :(得分:0)

对于存储处方集,我肯定会选择在州内存储数据,如果你查看React form official documentation他们会解释我认为你的情况。

据我所知,你会看到最多的标准是:

{{1}}

看看我为你做的JSFiddle!并在发送输入时检查您的控制台。

答案 3 :(得分:0)

这个问题刚刚出现在Google搜索中,所以我认为我建议使用Formik https://github.com/jaredpalmer/formik

它非常健壮和高效+如果您不希望在redux存储中使用表单状态,它也很好