Javascript react native:TypeError:应为动态类型'double';,但类型为'null';(UiManager.dispatchViewManagerCommand)

Javascript react native:TypeError:应为动态类型'double';,但类型为'null';(UiManager.dispatchViewManagerCommand),javascript,android,react-native,react-navigation,Javascript,Android,React Native,React Navigation,我尝试用两个输入字段实现简单的LoginScreen,即LogIn按钮和忘记密码按钮。在“反应导航”的帮助下实现屏幕之间的导航:“1.0.0-beta.11”。因此,当我在登录屏幕上单击忘记密码,然后返回登录屏幕,然后单击任何输入字段时,会出现-TypeError:expected dynamic type double',但had typenull'(在参数索引0处为UiManager.dispatchViewManagerCommand构造参数)。 findNodeHandle似乎返回nul

我尝试用两个输入字段实现简单的LoginScreen,即LogIn按钮和忘记密码按钮。在“反应导航”的帮助下实现屏幕之间的导航:“1.0.0-beta.11”。因此,当我在登录屏幕上单击忘记密码,然后返回登录屏幕,然后单击任何输入字段时,会出现-TypeError:expected dynamic type double',但had typenull'(在参数索引0处为UiManager.dispatchViewManagerCommand构造参数)。 findNodeHandle似乎返回null。但是如何解决这个问题呢

React本机版本:0.44 反应版本:16.0.0-alpha.6 平台:安卓

LoginScreen渲染方法:

render() {
    const passInputContainerStyle = this.state.passwordError === I18n.t('error.password.invalid')
      ? styles.inputContainerLarge : styles.inputContainer;
    if (this.props.isLoggedIn) {
      Keyboard.dismiss();
      NavigationUtils.navigateTo(this.props.navigation, 'Settings');
    }
    let errorGuy = this.verifyInputFieldsErrors();
    return (
      <DismissKeyboardView style={styles.container}>
        <View style={styles.mainContainer}>
          <View style={styles.logoContainer}>
            <Image
              style={styles.logo}
              source={images.logo} />
          </View>
          <View style={styles.inputContainer}>
            <EditTextWithError
              hint={I18n.t('hint.email')}
              errorMsg={errorGuy.emailErrorMessage}
              errorMsgVisibility={errorGuy.emailErrorVisibility}
              keyboardType='email-address'
              eyeVisibility={false}
              eyeHidePassModeEnabled={false}
              isNextMode={true}
              nextRef={this.state.refNextInput}
              onEndEditing={() => this.onEndEditingEmail()}
              onTextChanged={(text) => this.onEmailTextChanged(text)} />
          </View>
          <View style={passInputContainerStyle}>
            <EditTextWithError
              hint={I18n.t('hint.password.common')}
              errorMsg={errorGuy.passwordErrorMessage}
              errorMsgVisibility={errorGuy.passwordErrorVisibility}
              eyeVisibility={true}
              eyeHidePassModeEnabled={true}
              isNextMode={false}
              ref={(input) => this.passInput = input}
              onEndEditing={() => this.onEndEditingPassword()}
              onTextChanged={(text) => this.onPasswordTextChanged(text)} />
          </View>
          <TouchableOpacity style={styles.btnContainer} onPress={() => this.onLogInPressed()}>
            <Text style={styles.btnText}>{I18n.t('login.btnLogIn')}</Text>
          </TouchableOpacity>
          <TouchableOpacity style={styles.fupContainer} onPress={() => this.onForgotPasswordPressed()}>
            <Text style={styles.fupText}>{I18n.t('login.forgotPass')}</Text>
          </TouchableOpacity>
          {this.renderFooter()}
        </View>
      </DismissKeyboardView>
    );
  }
render(){
const passInputContainerStyle=this.state.passwordError==I18n.t('error.password.invalid'))
?styles.inputContainer大:styles.inputContainer;
if(this.props.isLoggedIn){
键盘;
NavigationUtils.navigateTo(this.props.navigation,“设置”);
}
让errorGuy=this.verifyInputFieldsErrors();
返回(
this.onEndEditingEmail()}
onTextChanged={(文本)=>this.onEmailTextChanged(文本)}/>
this.passInput=input}
onEndEditing={()=>this.onEndEditing密码()}
onTextChanged={(文本)=>this.onPasswordTextChanged(文本)}/>
this.onLogInPressed()}>
{I18n.t('login.btnLogIn')}
this.onForgotPasswordPressed()}>
{I18n.t('login.forgotPass')}
{this.renderFooter()}
);
}
编辑文本错误代码:

import React, { Component, PropTypes } from 'react';
import {
  Text,
  View,
  TextInput,
  Image,
  TouchableHighlight
} from 'react-native';
import images from '../../config/images';

const styles = require('./styles').default;

export default class EditTextWithError extends Component {
  state = {
    hideInput: false
  };

  static propTypes = {
    hint: PropTypes.string,
    errorMsg: PropTypes.string,
    errorMsgVisibility: PropTypes.bool,
    keyboardType: PropTypes.any,
    eyeVisibility: PropTypes.bool,
    eyeHidePassModeEnabled: PropTypes.bool,
    isNextMode: PropTypes.bool,
    nextRef: PropTypes.any,
    onTextChanged: PropTypes.func,
    onEndEditing: PropTypes.func
  };

  static defaultProps = {
    keyboardType: 'default',
    errorMsgVisibility: false,
    eyeVisibility: false,
    eyeHidePassModeEnabled: false,
    isNextMode: false,
    onTextChanged: (smth) => { },
    onEndEditing: () => { }
  }

  getFocus() {
    this.editText.focus();
  }

  componentWillMount() {
    this.state.hideInput = this.props.eyeHidePassModeEnabled;
  }

  render() {
    const { hint, errorMsg, errorMsgVisibility, keyboardType, eyeVisibility, eyeHidePassModeEnabled, isNextMode, nextRef, onTextChanged, onEndEditing }
      = this.props;
    let icon = this.state.hideInput ? images.eye.on : images.eye.off;
    const isErrored = errorMsgVisibility ? styles.errorBorder : styles.normalBorder;
    let returnKeyType = isNextMode ? "next" : "go";
    return (
      <View style={styles.container}>
        <TextInput style={[styles.input, isErrored]}
          placeholder={hint}
          underlineColorAndroid='transparent'
          autoCorrect={false}
          secureTextEntry={this.state.hideInput}
          multiline={false}
          keyboardType={keyboardType}
          placeholderTextColor='rgb(153, 153, 153)'
          returnKeyType={returnKeyType}
          onSubmitEditing={() => isNextMode ? nextRef.getFocus() : {}}
          onChangeText={(text) => onTextChanged(text)}
          onEndEditing={() => onEndEditing()}
          ref={(textEdit) => this.editText = textEdit} />
        {
          errorMsgVisibility &&
          <Text style={styles.errorText}>{errorMsg}</Text>
        }
        {
          eyeVisibility &&
          <TouchableHighlight style={styles.eyeContainer} underlayColor='transparent'
            onPress={() => this.setState({ hideInput: !this.state.hideInput })} >
            <Image source={icon} style={styles.eye} />
          </TouchableHighlight>
        }
      </View>
    );
  }
}
import React,{Component,PropTypes}来自'React';
进口{
文本,
看法
文本输入,
形象,,
可触摸高光
}从“反应本机”;
从“../../config/images”导入图像;
const styles=require('./styles')。默认值;
导出默认类EditTextWithError扩展组件{
状态={
隐藏输入:false
};
静态类型={
提示:PropTypes.string,
errorMsg:PropTypes.string,
errorMsgVisibility:PropTypes.bool,
键盘类型:PropTypes.any,
eyeVisibility:PropTypes.bool,
eyeHidePassModeEnabled:PropTypes.bool,
isNextMode:PropTypes.bool,
nextRef:PropTypes.any,
onTextChanged:PropTypes.func,
OneDediting:PropTypes.func
};
静态defaultProps={
键盘类型:“默认值”,
errorMsgVisibility:错误,
视觉可见度:假,
eyeHidePassModeEnabled:false,
isNextMode:false,
onTextChanged:(smth)=>{},
OneDediting:()=>{}
}
getFocus(){
this.editText.focus();
}
组件willmount(){
this.state.hideInput=this.props.eyeHidePassModeEnabled;
}
render(){
const{hint,errorMsg,errorMsgVisibility,keyboardType,eyeVisibility,eyeHidePassModeEnabled,isNextMode,nextRef,onTextChanged,onedediting}
=这是道具;
让icon=this.state.hideInput?images.eye.on:images.eye.off;
const iErrored=errorMsgVisibility?styles.errorBorder:styles.normalBorder;
让returnKeyType=isNextMode?“next”:“go”;
返回(
isNextMode?nextRef.getFocus():{}
onChangeText={(文本)=>onTextChanged(文本)}
OneDediting={()=>OneDediting()}
ref={(textEdit)=>this.editText=textEdit}/>
{
错误可视性&&
{errorMsg}
}
{
目测&&
this.setState({hideInput:!this.state.hideInput})}>
}
);
}
}
导航代码:

export const LoginStack = StackNavigator({
  Splash: {
    screen: SplashScreen,
    navigationOptions: {
      header: null,
    }
  },
  Login: {
    screen: LoginScreen,
    navigationOptions: {
      header: null,
    }
  },
  forgotPass: {
    screen: ForgotPasswordScreen,
    navigationOptions: ({ navigation }) => ({
      headerLeft: <BackIcon nav={navigation} />,
      headerTitle: I18n.t('forgotPass.screenTitle'),
      headerStyle: styles.toolbar,
      headerTitleStyle: styles.toolbarTitle
    }),
  },
  Settings: {
    screen: SettingsScreen,
    navigationOptions: ({ navigation }) => ({
      headerLeft: <BackIcon nav={navigation} />,
      headerTitle: I18n.t('settings.screenTitle'),
      headerStyle: styles.toolbar,
      headerTitleStyle: styles.toolbarTitle
    }),
  }
});

const BackIcon = ({ nav }) => (
  <TouchableOpacity onPress={() => nav.goBack()} style={styles.backIconContainer}>
    <Image source={images.backArrow} style={styles.backIcon} />
  </TouchableOpacity>
);


import { NavigationActions } from 'react-navigation';

export default class NavigationUtils {

    static navigateWithoutAnAbilityToGoBackTo(navigation, _routeName) {
        const actionToDispatch = NavigationActions.reset({
            index: 0,
            actions: [NavigationActions.navigate({ routeName: _routeName })]
        })
        navigation.dispatch(actionToDispatch);
    }

    static navigateTo(navigation, _routeName) {
        navigation.navigate(_routeName);
    }
}
export const LoginStack=StackNavigator({
飞溅:{
屏幕:飞溅屏幕,
导航选项:{
标题:null,
}
},
登录:{
屏幕:登录屏幕,
导航选项:{
标题:null,
}
},
放弃通行证:{
屏幕:放弃密码屏幕,
导航选项:({navigation})=>({
头左:,
标题:I18n.t('forgotPass.screenTitle'),
headerStyle:styles.toolbar,
headerTitleStyle:styles.toolbarTitle
}),
},
设置:{
屏幕:设置屏幕,
导航选项:({navigation})=>({
头左:,
标题:I18n.t('settings.screenTitle'),
headerStyle:styles.toolbar,
headerTitleStyle:styles.toolbarTitle
}),
}
});
常量BackIcon=({nav})=>(
nav.goBack()}style={style.backIconContainer}>
);
从“react navigation”导入{NavigationActions};
导出默认类NavigationUtils{
静态导航不支持返回(导航,路径名称){
const actionToDispatch=NavigationActions.reset({
索引:0,
操作:[NavigationActions.navigate({routeName:_routeName})]
})
导航、调度(actionToDispatch);
}
静态导航到(导航,路由名称){
导航。导航(_routeName);
}
}

有什么想法吗?请