React native0.49版本 PropType默认类型不识别



  • 报错 undefined is not an object(evaluating '_react3.default.PropTypes.string')
    有遇到过这个问题的么,是如何解决的



  • 代码贴一下,报错贴个完整点的看看



  • 自从 react v16.0.0 开始,PropTypes 不再由 react 提供,而是作为独立的模块 prop-types。另见:Typechecking With PropTypes

    RN v0.49 以前是用 react v16.0.0-alpha,还没有移除 ProTypes,但有 warning。



  • 此回复已被删除!


  • @7c00 正解,的确是这个问题,没有导入prop-types这个模块。谢谢~



  • undefined is not an object(evaluating '_react3.default.PropTypes.shape') 我报的是这个错。。。



  • @StoneMores 一样的问题,如果你能理解 PropTypes 是什么。



  • @7c00

    /**

    import React, { Component,PropTypes } from 'react';
    import { Navigator } from 'react-native-deprecated-custom-components';
    import {
    Platform,
    StyleSheet,
    Text,
    View,
    ScrollView
    } from 'react-native';
    SomeComponent.propTypes = {
    foo: PropTypes.string
    };
    const instructions = Platform.select({
    ios: 'Press Cmd+R to reload,\n' +
    'Cmd+D or shake for dev menu',
    android: 'Double tap R on your keyboard to reload,\n' +
    'Shake or press menu button for dev menu',
    });
    //外部组件导入
    const Header = require('./Header');

    export default class App extends Component{
    render (){
    let defaultName='navigatorTest';
    let defaultComponent=NavigatorTest;
    return (
    <Navigator
    initialRoute = {{ name:defaultName,component:defaultComponent }}
    //配置场景
    configureScene = { (route) => {
    return Navigator.SceneConfigs.VerticalDownSwipeJump;
    }}
    renderScene={(route, navigator) => { // 将板块生成具体的组件
    let Component = route.component; // 获取路由内的板块
    return <Component {...route.params} navigator={navigator} /> // 根据板块生成具体组件
    }}
    />
    /* <View>
    <NavigatorTest></NavigatorTest>
    </View>
    init*/
    //List
    /* <View style={styles.flex}>
    <Header></Header>
    <List title="你好"></List>
    <List title="章磊"></List>
    <List title="StoneMore"></List>
    </View>*/
    );
    }
    }
    class List extends Component{
    render (){
    return(
    <View style={styles.list_item}>
    <Text style={styles.font_item}>{this.props.title}</Text>
    </View>
    );
    }
    }

    class NavigatorTest extends Component{

    constructor(props){
        super(props);
        this.state ={};
    }
    

    _pressButton(){
    const {navigator} = this.props;//这句等于 const navigator = this.props.navigator;
    if(navigator){
    navigator.push({
    name:'Detail',
    component:Detail,
    })
    }
    }
    render(){
    return(
    <ScrollView style={styles.flex}>
    <Text style={styles.list_item} onPress={this._pressButton.bind(this)}>
    这是NavigatorTest组件
    </Text>
    </ScrollView>
    );
    }
    }

    class Detail extends Component{
    constructor(props){
    super(props);
    this.state ={};
    }
    _pressButton(){
    const {navigator} = this.props;//这句等于 const navigator = this.props.navigator;
    if(navigator){
    navigator.pop();
    }
    }
    render(){
    return(
    <ScrollView style={styles.flex}>
    <Text style={styles.list_item} onPress={this._pressButton.bind(this)}>这是详情页</Text>
    </ScrollView>
    );
    }
    }

    const styles = StyleSheet.create({
    flex:{
    flex:1
    },
    list_item:{
    borderBottomWidth:1,
    justifyContent: 'center',
    height:40,
    marginLeft:10,
    marginRight:10,
    color:'#7b7b7b',
    },
    font_item:{
    fontSize:25
    }
    });

    初学,没太明白,我按教程打的,就是会报错。能帮忙看下吗?



  • @StoneMores 不用看代码了,况且这代码也太旧了。

    如果你连我上面的回复都看不明白的话,那么我觉得你需要巩固 react 和 es6 的基础,而不是让别人给你一个显而易见的答案。



  • @7c00 你好,我自己的项目中使用的是 'prop-types' 中的 PropTypes,但是升级 0.49 之后报的错误是在 react-native-deprecated-custom-components 中,因为使用了 Navigator。请问这种情况有办法解决吗?

    0_1508306081178_image.png
    0_1508306204808_image.png



  • @ayuhani RN v0.49+ 没有办法再用 react-native-deprecated-custom-components,因为两个库都 peerDependencie react,但一个需要 v16+,另一个反之,这怎么可能嘛。

    如果你非要用 react-native-deprecated-custom-components,就不能用 RN v0.49+。

    但我建议不要再用 react-native-deprecated-custom-components 了,都已经 deprecated 不维护了还继续用不是坑自己吗,考虑用 react-navigation 吧。


  • administrators

    Navigator其实根本不需求特定react版本,用是能用的,无非就是手动去改这些proptypes



  • 在 react 接口没有变的情况下,是可以不用关心版本是什么,但现在 react v16 发生了 break change,需要手动改库的代码才能正常运行,不就是说这个库已经不能兼容最新的 react 了吗。讲道理,react-native-deprecated-custom-components 的 peerDependencies 是不能写 "react": "*" 的。


登录后回复