如何用 redux 表单解决这个问题?它显示语法错误



我们将对所有应用程序的表单使用 redux 表单。该应用程序可能有5种不同的形式用于不同的目的。第一种形式的问题在于它显示语法错误。但是在实现redux形式之前,它使用相同的语法。这段代码有什么问题?

import React, {Component} from "react";
import {Text, Image, KeyboardAvoidingView, Platform,View} from "react-native";
import {
  Content,
  Form,
  Item,
  Input,
  Icon,
  Button,
  ListItem,
  Row,
  Col,
  Grid,
  Toast,
  Container,
  Left,
  Right,
  Body

} from "native-base";
import styles from "../styles/formstyle";
import { Field, reduxForm } from "redux-form";
const required = value => (value ? undefined : "Required");
const maxLength = max => value => (value && value.length > max ? `Must be ${max} characters or less` : undefined);
const maxLength15 = maxLength(15);
const minLength = min => value => (value && value.length < min ? `Must be ${min} characters or more` : undefined);
const minLength8 = minLength(8);
const email = value =>
  value && !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$/i.test(value) ? "Invalid email address" : undefined;
const alphaNumeric = value => (value && /[^a-zA-Z0-9 ]/i.test(value) ? "Only alphanumeric characters" : undefined);
class SigninScreen extends Component {
  static navigationOptions = {
    gesturesEnabled: false,
  };
  renderInput({ input, label, type, meta: { touched, error, warning } }) {
    return (
      <Item style={styles.item}
       error={error && touched}
                >
                <Icon
                  active
                  name="mail"
                  style={styles.icon}
                />
                <Input
                {...input.name="email"}
ref={c => (this.textInput = c)}
                  placeholder="Email"
                  placeholderTextColor="#a4916d"
                  style={styles.input}
                />
              </Item>
                     <Item style={styles.item}  error={error && touched}>
                <Icon
                  active
                  name="lock"
                  style={styles.icon}
                />
                <Input
                  {...input.name="password"}
ref={c => (this.textInput = c)}
                  secureTextEntry={true}
                  placeholder="Password"
                  placeholderTextColor="#a4916d"
                  style={styles.input}
                />
              </Item>
    );
  }

    login() {
    if (this.props.valid) {
      this.props.navigation.navigate("Drawer");
    } else {
      Toast.show({
        text: "Enter Valid Username & password!",
        duration: 2000,
        position: "top",
        textStyle: { textAlign: "center" },
      });
    }
  }
  render() {

    return (
      <Image style={background.img} source={require("../img/cover.jpg")}>
          <Container  style={styles.content}>
              <Form>
        <Field name="email"
               validate={[email, required]} />
        <Field
          name="password"
          component={this.renderInput}
          validate={[alphaNumeric, minLength8, maxLength15, required]}
        />
      </Form>
            <ListItem
              style={styles.list}
            >
            <Left>
                    <Button
                      primary
                      full
                      style={{width:"90%"}}
                      onPress={() => this.props.navigation.navigate("Signup")}
                    >
                      <Text style={{color: "#0dc49d"}}>fb</Text>
                    </Button>
                </Left>
                <Body/>
                <Right>
                    <Button
                      danger
                      full
                      onPress={() =>
                        this.props.navigation.navigate("Forgetpass")}
                    >
                      <Text style={{color: "#0dc49d"}}>google</Text>
                    </Button>
            </Right>
            </ListItem>
            <Button
              full
              style={{backgroundColor: "#0dc49d", width:"90%"}}
            onPress={() => this.login()}
            >
              <Text style={{color:"#ffffff"}}>Sign In</Text>
            </Button>
          </Container>
      </Image>
    );
  }
}
export default reduxForm({
  form: 'test'
})(SigninScreen)

它说JSX元素必须包装一个封闭的标签。Eslint 显示渲染输入中的第二个组件。我正在将其与本机基础一起使用。什么会导致此错误?另外,您能否检查渲染输入和字段组件中的通信是否正确?我不确定在解决语法错误后,此代码是否可以:(

提前感谢!

renderInput方法返回两个不同的项目。您需要将它们包装到单个包装的组件中,就像错误所说的那样。

  renderInput({ input, label, type, meta: { touched, error, warning } }) {
    return (
      <View>
        <Item style={styles.item} error={error && touched}>
          <Icon active name="mail" style={styles.icon} />
          <Input {...input.name="email"} ref={c => (this.textInput = c)} placeholder="Email" placeholderTextColor="#a4916d" style={styles.input} />
        </Item>
        <Item style={styles.item}  error={error && touched}>
          <Icon active name="lock" style={styles.icon} />
          <Input {...input.name="password"} ref={c => (this.textInput = c)} secureTextEntry={true} placeholder="Password" placeholderTextColor="#a4916d" style={styles.input} />
        </Item>
      </View>
    );
  }

相关内容

  • 没有找到相关文章

最新更新