javascript - 如何在我的输入数据不填充该数组中的其他输入的情况下编辑动态添加的输入?

标签 javascript arrays reactjs react-native mapping

我有一个 formik根据数组 x 的长度,将 View 映射到两个 input 的表单。 x的长度会根据不同的场景而有所不同。

这是代码。

import React, { Component, Fragment } from "react";
import { Button, TextInput, View, StyleSheet } from "react-native";
import { Formik } from "formik";

class App extends Component {
  render() {
    const x = [1,2];
    return (
      <View>
        <Formik
          initialValues={{ name: "", description: "" }}
          onSubmit={values => alert(JSON.stringify(values))}
        >
          {({ values, errors, handleBlur, handleChange, handleSubmit }) => (
            <Fragment>
              <TextInput
                placeholder="name"
                value={values.name}
                handleBlur={() => handleBlur("name")}
                onChangeText={handleChange("name")}
                style={styles.input}
              />
              <TextInput
                placeholder="description"
                value={values.description}
                handleBlur={() => handleBlur("description")}
                onChangeText={handleChange("description")}
                style={styles.input}
              />
              {x.map(x => {
                return (
                  <View>
                    <TextInput key={x}
                      placeholder={`name`}
                      value={values.name}
                      handleBlur={() => handleBlur}
                      onChangeText={handleChange}
                      style={styles.input}
                    />
                    <TextInput
                      placeholder={`description`}
                      value={values.description}
                      handleBlur={() => handleBlur(x.toString())}
                      onChangeText={handleChange}
                      style={styles.input}
                    />
                  </View>
                );
              })}
              <Button title="submit" onPress={handleSubmit} />
            </Fragment>
          )}
        </Formik>
      </View>
    );
  }
}

当我提交时,我无法让它正常工作。当我输入时,文本也会填充该名称的所有其他输入,例如,如果我输入 description 输入,文本会填充 的所有其他迭代description,我怎样才能让它工作?

看看小吃

HERE

最佳答案

您需要动态创建初始值对象以便提交正常工作,例如:

const x = [1, 2];
const initialFields = { name: "", description: "" };
const extraFields = x.map(num => ({
  [`name${num}`]: "",
  [`description${num}`]: ""
}));

这可以像这样传递给您的 Formik 表单:

<Formik
  initialValues={Object.assign(initialFields, ...extraFields)}
  onSubmit={values => alert(JSON.stringify(values))}
>

然后像这样更改动态添加的 TextInputs 以使用这些值:

{x.map(x => {
  return (
    <View>
      <TextInput
        placeholder={`name${x}`}
        value={values[`name${x}`]}
        handleBlur={() => handleBlur(`name${x}`)}
        onChangeText={handleChange(`name${x}`)}
        style={styles.input}
      />
      <TextInput
        placeholder={`description${x}`}
        value={values[`description${x}`]}
        handleBlur={() => handleBlur(`description${x}`)}
        onChangeText={handleChange(`description${x}`)}
        style={styles.input}
      />
    </View>
  );
})}

查看 my fork of your CodeSandbox用于工作演示。

关于javascript - 如何在我的输入数据不填充该数组中的其他输入的情况下编辑动态添加的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55661783/

相关文章:

android - 在任何根 : [. 中都找不到入口文件 index.js ..] (React Native)

javascript - 触发 ng-click 动态元素

javascript - d3.csv 无法上一级目录

python - 在python中通过其索引和数组切片数据框

javascript - 如何在 Angular 1 中将项目移动到列表前面

c++ - 将数组的一个元素与整个另一个数组元素进行比较

reactjs - 使用 react-router v4 测试安装的组件

javascript - 如何创建父/包装组件 "trigger"或调用子组件的方法?

javascript - 从 URL 中提取页面名称

javascript - 防止将重复对象添加到状态 react redux