簡體   English   中英

React Native Paper 按鈕不會觸發 onpress

[英]React native paper button doesnt trigger onpress

我正在使用 firebase auth 進行身份驗證並做出本機反應。 我有一個反應本機紙張按鈕來提交表單,但是當您單擊它時不會觸發 onPress function。

我正在使用 firebase 7.9.0 並反應原生 39.0.4。 我嘗試過的事情:

  • 使其命名為 function
  • 制作 onPress 控制台日志 function

按鈕代碼:

<Button
          style={styles.button}
          mode="contained"
          onPress={() =>
            dispatch(
              signUp(formState.values.email, formState.values.password)
            )
          }
          color={colors.primary}
        >
          Submit
        </Button>

整個文件:

import React, { useCallback, useReducer } from "react";
import {
  StyleSheet,
  View,
  KeyboardAvoidingView,
  ScrollView,
} from "react-native";
import Input from "components/Input";
import { Card, Button } from "react-native-paper";
import colors from "config/Colors";
import { useDispatch } from "react-redux";
import { signUp } from "store/actions/auth";
const UPDATE = "UPDATE";

const formReducer = (state, action) => {
  switch (action.type) {
    case UPDATE:
      const values = {
        ...state.values,
        [action.input]: action.value,
      };
      const validities = {
        ...state.validities,
        [action.input]: action.isValid,
      };
      let formIsValid = Object.keys(validities).every((key) => {
        return validities[key] === true;
      });
      // console.log("formReducer -> formIsValid", formIsValid);

      return {
        ...state,
        values,
        validities,
        formIsValid,
      };
    default:
      return state;
  }
};

function AuthForm() {
  const dispatch = useDispatch();
  const [formState, dispatchFormState] = useReducer(formReducer, {
    values: {
      email: "",
      password: "",
    },
    validities: {
      email: false,
      password: false,
    },
    formIsValid: false,
  });

  // const onSignUp = () => {
  //   console.log("Start");
  //   dispatch(signUp(formState.values.email, formState.values.password));
  //   console.log("Done");
  // };

  const onChange = useCallback(
    (input, value, isValid) => {
      dispatchFormState({ type: UPDATE, value, isValid, input });
    },
    [formState]
  );
  return (
    <KeyboardAvoidingView
      behavior="padding"
      keyboardVerticalOffset={50}
      style={styles.screen}
    >
      <Card style={styles.card}>
        <ScrollView>
          <Card.Title title="Login" />
          <Input
            id="email"
            label="E-Mail"
            keyboardType="email-address"
            required
            email
            autoCapitalize="none"
            errorText="Please enter a valid email"
            onInputChange={onChange}
          />
          <Input
            id="password"
            label="Password"
            secureTextEntry
            required
            minLength={5}
            autoCapitalize="none"
            errorText="Please make sure your password is longer than 5 characters"
            onInputChange={onChange}
          />
          <Card.Actions>
            <Button
              style={styles.button}
              mode="contained"
              onPress={() =>
                dispatch(
                  signUp(formState.values.email, formState.values.password)
                )
              }
              color={colors.primary}
            >
              Submit
            </Button>
          </Card.Actions>
          <Card.Actions>
            <Button
              style={styles.button}
              mode="text"
              color={colors.accent}
              onPress={() => {}}
            >
              Switch To Sign Up
            </Button>
          </Card.Actions>
        </ScrollView>
      </Card>
    </KeyboardAvoidingView>
  );
}

AuthForm.navigationOptions = {
  headerTitle: "Authenticate",
};

const styles = StyleSheet.create({
  screen: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
    padding: 10,
  },
  card: {
    padding: 20,
    height: "100%",
  },
  button: {
    width: "100%",
  },
});

export default AuthForm;

授權動作:

import firebase from "config/firebase";
export const SIGN_UP = "SIGN_UP";

export const signUp = (email, password) => {
  return async (dispatch) => {
    const res = await firebase
      .auth()
      .createUserWithEmailAndPassword(email, password)
      .catch(console.error);
    console.log(res);
    dispatch({ type: SIGN_UP });
  };
};

2周后我修好了!

這是我所做的:

  • I used firebase rest instead of firebase web sdk (I don't think that fixed the problem, but its good that I did it to get more used to traditional backends)
  • react-native-paper package 出現錯誤,所以我用普通的 RN 按鈕替換了該按鈕,這很煩人,因為我必須對其進行樣式設置:(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM