关于键盘遮挡的问题:

看Android manifests中的windowSoftInputMode的值,可以有多个值共同决定。

  1. adjustPan:不会往上挤你的内容,但是键盘会遮挡住你的输入框,
  2. adjustResize:会自动调整不遮挡你的内容,但是你的内容会变形。被挤压的。
    这个时候你就可以用官方给的调整键盘遮挡的组件KeyboardAvoidingView 放在这个里面的内容不会被遮挡住。这是官方给的解决办法

关于fetch的post

平时咱们在web上直接就用表单直接提交了,没有了解到许多细节,咱么的rn可是不一样的,咱们的网络请求是通过fetch来完成的,他的结构如下
let formData = new FormData();
formData.append(“name”,“admin”);
formData.append(“password”,“admin123”);

fetch(url , {
method: ‘POST’,
headers: {},
body: formData,
}).then((response) => {
if (response.ok) {
return response.json();
}
}).then((json) => {
alert(JSON.stringify(json));
}).catch((error) => {
console.error(error);
});
其实还是蛮简单明了的不是嘛,如果你这么看你就大错特错了,由于我没有去看fetch的官方文档(ps:全英文看不太懂),我们可以看到body参数后面加的是formData,直接解释吧,我们网页上的表单提交时body中的值会自动转化为formData的形式,但是fetch不会,所以这里我们直接new一个formData对象,再放到请求体body中。

实现点击空白处让输入框失去焦点(常用在登录与注册页面或者其他需要提交表单的页面)

主要实现是通过ref,给input添加ref,在最外层的touchableOpacity添加点击事件,当点击时失去焦点即可以下是简单的代码实现:

export default class createCollection extends Component {

    async click() {
        this.refs.input1.blur();
        this.refs.input2.blur();
    }
    render() {
        return (
            <View style={style.body}>
                <TouchableOpacity
                    activeOpacity={1}
                    onPress={() => {
                        this.click();
                    }}
                    style={style.touchalbe}
                >
                <View style={
                            style.content
                        }>
                    <Fumi
                        ref={'input1'}
                        label={'Item Name'}
                        iconClass={Icon}
                        iconName={'subtitles'}
                        iconColor={'#f95a25'}
                        iconSize={20}
                        iconWidth={40}
                    />
                    <Fumi
                        ref={'input2'}
                        label={'Item Kind'}
                        iconClass={Icon}
                        iconName={'textsms'}
                        iconColor={'#f95a25'}
                        iconSize={20}
                        iconWidth={40}

                    />
                </View>
                </TouchableOpacity>
            </View>

        )
    }
}

上面我用的是封装过的输入框Fumi(来自一个好看的第三方库叫做react-native-textinput-effects),平常的是input。主要看逻辑实现就可以了,这个还是很简单的。ps:我没有把import写进来,大家如果有需要要自己import哈

如果用了react-native-elements,里面的header在安卓上有一点的问题

具体显示为标题栏很高(因为把状态栏的大小也放进去了)具体解决方案:

<Header
                    statusBarProps={{ translucent: true, backgroundColor: 'transparent' }}
                />

加上这个属性才能好,具体意思就是将状态栏隐藏。

07-25 17:22