控制台文档
帮助文档
快速开始
注册新用户
创建应用
cpcn-client桌面工具
发布新版本
热更新之React Native App
手动安装cpcn-react-native(Android)
手动安装cpcn-react-native(iOS)
示例:React Native App集成CodePush热更新,从零开始
React Native App集成CodePush热更新,Function组件编程方式完整代码示例
使用模板创建项目
CodePush热更新费用规则参考
用户行为分析,让你更懂你的用户-Footprint
用户行为分析之React Native App
Footprint常见问题解答
开发者反利计划,送京东购物卡
技术支持与开发服务
关于我们

React Native App集成CodePush热更新,Function组件编程方式完整代码示例

以下是用Function组件编程方式(使用Hook)在React Native App中集成CodePush热更新的完整代码示例。
若要了解详细步骤和注意事项,请点击这里

import React, { useEffect, useState } from 'react';
import cpcn from 'cpcn-react-native';
import { SafeAreaView, View, Text, Button, Modal } from 'react-native';

const App = () => {
    const [upgradeState, setUpgradeState] = useState(0);
    const [{ upgradeAllBytes, upgradeReceived }, setUpgradeData] = useState({ upgradeAllBytes: 1, upgradeReceived: 0 });

    useEffect(() => {
        cpcn.check({
            // 检查是否有新版本后调用此方法
            checkCallback: (remotePackage, agreeContinueFun) => {
                if(remotePackage){
                    // 如果 remotePackage 有值,表示有新版本可更新。
                    // 将 upgradeState 的值设为1,以显示提示消息
                    setUpgradeState(1);
                }
            },
            // 下载新版本时调用此方法
            downloadProgressCallback: (downloadProgress) => {
                // 更新显示的下载进度中的数值
                setUpgradeData({
                    upgradeReceived: downloadProgress.receivedBytes, // 已下载的字节数
                    upgradeAllBytes: downloadProgress.totalBytes // 总共需下载的字节数
                });
            },
            // 安装新版本后调用此方法
            installedCallback: (restartFun) => {
                // 新版本安装成功了,将 this.state.upgradeState 的值设为0,以关闭对话框
                setUpgradeState(0);
                // 调用此方法重启App,重启后将会使用新版本
                restartFun(true);
            }
        });
    }, []);

    const upgradeContinue = () => {
        // 用户确定更新后,调用此方法以开始更新
        cpcn.agreeContinue(true);
        // 将 this.state.upgradeState 的值设为2,以显示下载进度
        setUpgradeState(2);
    }

    return (
        <SafeAreaView>
            <View>
                <Text>Ver: 1</Text>
            </View>
            <Modal
                visible={upgradeState > 0}
                transparent={true}>
                <View style={{padding:18, backgroundColor:"rgba(10,10,10,0.6)", height:"100%", display:"flex", flexDirection:"row", alignItems:"center"}}>
                    <View style={{backgroundColor:"#fff", width:"100%", padding:18}}>
                        {
                            upgradeState == 1
                            &&
                            <View>
                                <View style={{paddingBottom:20}}>
                                    <Text>发现新版本</Text>
                                </View>
                                <View>
                                    <Button title="马上更新" onPress={upgradeContinue}/>
                                </View>
                            </View>
                        }
                        {
                            upgradeState == 2
                            &&
                            <View>
                                <Text style={{textAlign:"center"}}>{upgradeReceived} / {upgradeAllBytes}</Text>
                            </View>
                        }
                    </View>
                </View>
            </Modal>
        </SafeAreaView>
    );
};

export default App;