React Native踩坑日记(一)—— 入门

2017-08-04  本文已影响132人  黑羽肃霜

2017.8.4

知识点

构造函数

回调的机制 —— 包括如何切换状态机

先说如何切换状态机.指的是在需要的时机,改变this.state中某个变量的值。以下面的代码为例,修改的就是inputNuminputPW

this.state = {inputNum: '',
              inputPW: '',};

修改状态机

this.setState(
    () = {return {inputNum:'neededValue',}}
);

下面是一个示例代码

以我们目前看到的textInput为例来说明

export default class LoginDemo extends Component {
    constructor(props) {
        super(props);
        this.state = {
            inputNum: '',
            inputPW: '',
        };
        this.updatePW = this.updatePW.bind(this);
    }

    updateNum(newText) {
        console.log("设置数字,输入" + newText);
        this.setState(
             () => {return {inputNum:newText,}}
        );
    }

    updatePW(newText) {
        console.log("设置密码,输入" + newText);
        this.setState()
    }

    render() {
        return (
            <View style={styles.container}>
                <TextInput style={styles.inputStyle}
                           selectionColor={'red'}
                           placeholder={"请输入数字\n"}
                           placeholderTextColor={'purple'}
                           onChangeText={
                               (a) => {this.updateNum(a);}
                           }
                />
                <Text style={styles.welcome}>
                    您输入的电话号码 : {this.state.inputNum}
                </Text>
                <Text style={styles.welcome}>
                    您输入的密码 : {this.state.inputPW}
                </Text>
                <TextInput style={styles.inputStyle}
                           maxLength={6}
                           placeholder={"请输入密码\n"}
                           secureTextEntry={true}
                           onChangeText={(newText) => this.updatePW(newText)}
                />
            </View>
        );
    }
}

代码实现的目的是在 TextInput中输入字符串,同时通过监听函数onChangeText去更新另一个Text的显示值.

从报错的原因来看,应该是onChangeText要求{}中传递的参数是一个函数,但是实际上,调用 this.updateNum的时候,他是将this.setState的执行结果返回了。

onChangeText={(a) => {this.updateNum(a);}}


真机调试

鉴于上面的介绍,我在两个平台调试时,并不以 react-native run-iosreact-native run-android命令来运行,而是分别使用XcodeAndroid Studio来做。

Xcode没什么好说了,但是安卓的真机调试有一个坑。
真机调试首次加载可能会报错:
java.lang.RuntimeException: Unable to load script from assets 'index.android.bundle'. Make sure your bundle is packaged correctly or you're running a packager server.

这是因为还没有在手机上设置 server 和 port,摇一摇启动设置页面,点击 DevSettings -> Debug server host & port for device -> 输入 [本机ip]:8081,本机 ip 可用 ifconfig 命令查看。输入完后返回,再摇一摇然后点击 Reload 即可。

上一篇 下一篇

猜你喜欢

热点阅读