精华内容
下载资源
问答
  • 30天学习ReactNative教程

    2019-08-10 06:43:23
    30天学习React Native教程
  • React-教程 对于导航1-“ npm i-保存React-导航React本机-矢量-图标道具类型” 2-对于GridView“ npm install react- native-gridview--save” 3-显示React消息(例如,文本动画)“ npm我React-动画-消息” 4-要...
  • 该项目是通过。... 升级到React Native的新版本需要更新react-nativereact和expo软件包版本,并在app.json设置正确的sdkVersion 。 有关软件包版本兼容性的最新信息,请参见版本控制指南。 可用脚本
  • 带有React Native教程的电影票预订应用程序 通过构建电影票预订应用程序,了解如何使用React Native构建漂亮的动画UI。 教程 在此处阅读完整的教程 演示版
  • React Native视频教程

    2018-11-27 14:02:06
    很经典的React Native视频教程,可迅速让您上手干活,拿下高薪工作不是梦
  • app开发之React Native教程合集.zip
  • React Native 学习教程及电商项目实战全套视频教程。。 React Native 学习教程及电商项目实战全套视频教程。。 React Native 学习教程及电商项目实战全套视频教程。。
  • React Native教程 来自: :
  • 主要给大家介绍了关于React Native学习教程之Modal控件自定义弹出View的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用React Native具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习...
  • 在windows搭建RN环境
  • React Native Geocache App 一个简单的跨平台(iOS和Android)React Native地理缓存应用程序和服务器(由now.sh支持)。 该示例组合到。 免费开始学习和掌握React Native! 安装 git clone ...
  • React Native评论应用 一个简单的跨平台(iOS和Android)React Native审查应用程序和服务器(由now.sh提供支持)已集成身份验证。 该示例组合到。 免费开始学习和掌握React Native! 安装 git clone ...
  • React Native视频教程-电商项目实战,祝你更快掌握react native开发的相关技能
  • This React Native tutorial is aimed at introducing React Native, giving you the basics of what you need to know before building a real React Native application. After that, we proceed to help you buil...

    This React Native tutorial is aimed at introducing React Native, giving you the basics of what you need to know before building a real React Native application. After that, we proceed to help you build your first real React Native app. By the end of this article, you will build a React Native app that can run on both iOS and Android devices.

    本React Native教程旨在介绍React Native,为您提供构建真正的React Native应用程序之前需要了解的基础知识。 之后,我们将继续帮助您构建您的第一个真正的React Native应用程序。 到本文结尾,您将构建一个可在iOS和Android设备上运行的React Native应用程序。

    React Native is a cross-platform development library built on top of React by Facebook, for mobile development platforms. React Native was developed in 2013 as a hackathon project inside Facebook and was later released for public use in 2015. It gained huge popularity in the developer community and multiple tech companies adopted it as a mobile development solution because React Native apps share a single codebase for both iOS and Android and could hardly be distinguished from truly native apps. According to the React Native website:

    React Native是跨Facebook开发的跨平台开发库,用于移动开发平台。 React Native于2013年作为Facebook内的一个黑客马拉松项目开发,后来于2015年发布以供公众使用。它在开发人员社区中获得了广泛的欢迎,多家技术公司将其用作移动开发解决方案,因为React Native应用程序共享一个代码库,包括iOS和Android,很难与真正的本地应用程序区分开。 根据React Native网站的说法:

    In 2018, React Native had the 2nd highest number of contributors for any repository in GitHub. Today, React Native is supported by contributions from individuals and companies around the world including Expo, and Microsoft.

    在2018年,React Native 在GitHub中任何存储库的贡献者数量中 排名第二 如今,React Native得到了来自世界各地的个人和公司(包括 Expo Microsoft)的支持

    Before we go ahead and build our first React Native app, I’m going to show you the pros and cons of React Native and more details on what it actually is.

    在继续构建第一个React Native应用之前,我将向您展示React Native的优缺点,以及有关其实际含义的更多细节。

    什么是React Native? (What is React Native?)

    • React Native is a hybrid mobile development library.

      React Native是一个混合移动开发库。
    • React Native apps are written in JSX and Javascript and compiled into native code.

      React Native应用程序是用JSX和Javascript编写的,并被编译成本机代码。
    • React Native apps contain 85–90% shared Javascript and JSX code

      React Native应用程序包含85–90%的共享Javascript和JSX代码

    什么是React Native? (What is React Native not?)

    • React Native is not a webview

      React Native不是Webview
    • React Native is not React

      React Native不是React
    • React Native is not PWA

      React Native不是PWA
    • React Native as of this writing supports web development using React Native for Web

      在撰写本文时,React Native支持使用React Native for Web进行Web开发。

    为什么要采用/学习React Native? (Why should you adopt/learn React Native?)

    • Targets multiple platforms (iOS, Android, Web, TVOS) with the same codebase and effort

      以相同的代码库和工作量针对多个平台(iOS,Android,Web,TVOS)
    • Has a large and growing community that is there to provide adequate support

      有一个庞大且不断发展的社区,可以提供足够的支持
    • Has native support meaning that you can customize the native code to suit your use-case/business logic

      具有本机支持,意味着您可以自定义本机代码以适合您的用例/业务逻辑
    • Requires knowledge of Javascript. Javascript is a language in high popular demand and learning it will pay off immensely

      需要Java知识。 Javascript是一种受欢迎程度很高的语言,学习它将会获得巨大回报
    • Has a feature which I personally refer to as the sweet spot: Fast Refresh (Hot Reloading)

      具有我个人称为最有效的功能:快速刷新(热加载)

    React本机的缺点? (React Native Drawbacks?)

    React Native has some drawbacks too, but the developers of the library are consistently trying to improve them as the community grows:

    React Native也有一些缺点,但是随着社区的发展,该库的开发人员一直在努力改善它们:

    • While the codebase is mostly shared among various platform, knowledge of native development is sometimes required in developing more advanced React Native projects

      虽然代码库主要在各种平台之间共享,但是在开发更高级的React Native项目时有时需要原生开发知识
    • Despite the fact that most React Native apps look the same in appearance to native apps React Native seems to lack the smooth navigation achieved by native apps.

      尽管大多数React Native应用程序在外观上与本机应用程序相同,但React Native似乎缺乏本机应用程序实现的流畅导航。
    • React Native developers agree that React Native style of error reporting is not the best out there but they cope with it over time.

      React Native开发人员一致认为,React Native错误报告风格并不是目前最好的,但是随着时间的推移,他们会对其进行处理。

    构建您的第一个React Native应用 (Build Your First React Native App)

    Let’s build a React Native app to display a simple list of countries. The app will contain only one screen, and we are going to keep its functionality and styling to a minimum, since the purpose of this tutorial is to help you set up your React Native developer environment and dip your toes into the React Native programming language.

    让我们构建一个React Native应用程序以显示简单的国家/地区列表。 该应用程序仅包含一个屏幕,并且我们将其功能和样式保持在最低限度,因为本教程的目的是帮助您设置React Native开发人员环境并将脚趾浸入React Native编程语言。

    In this React Native tutorial we are going to use Expo in order to build your first React Native application. Expo is a powerful tool for those how are beginners in the React Native world, since it lets you run and preview React Native apps on your devices easily.

    在本React Native教程中,我们将使用Expo来构建您的第一个React Native应用程序。 对于那些在React Native领域中的初学者来说,Expo是一个强大的工具,因为它使您可以轻松地在设备上运行和预览React Native应用。

    1.安装Expo (1. Install Expo)

    Follow the official documentation on how to install Expo. Once you’ve installed it, come back to this tutorial and follow the next steps in order to build your first React Native app.

    请遵循有关如何安装Expo的官方文档。 安装后,请返回本教程并按照以下步骤操作,以构建您的第一个React Native应用程序。

    2.创建一个新的React Native App (2. Create a New React Native App)

    expo init firstapp

    Select the ‘blank’ project

    选择“ 空白 ”项目

    Select ‘Y’ to work with yarn.

    选择“ Y ”以处理纱线。

    Yarn v1.19.2 found. Use Yarn to install dependencies? (Y/n)

    Once you click Yes, Expo will work its magic and create all the necessary files for you. You can take a look at the directory structure to get an idea of what is going on in the project.

    一旦单击“是”,Expo将发挥其魔力并为您创建所有必需的文件。 您可以看一下目录结构,以了解项目中正在发生的事情。

    3.运行您的第一个React Native应用 (3. Run Your First React Native App)

    Run the following commands to start your newly created React Native app:

    运行以下命令以启动新创建的React Native应用程序:

    cd firstapp yarn start

    At this point, if you set up Expo properly at the previous steps, the new React Native project should have loaded successfully and you should be able to see the app as in the following screenshot:

    此时,如果您在前面的步骤中正确设置了Expo,那么新的React Native项目应该已经成功加载,并且您应该能够看到该应用程序,如以下屏幕截图所示:

    Image for post

    There you have it, the very first React Native application that you’ve build. By default it says ‘ Open up App.js to start working on your app’ and I agree that it’s not the best welcome message Expo could offer but we’re going to go ahead and do as they say. Let’s open App.js file, which looks like this:

    您已经有了它,这是您构建的第一个React Native应用程序。 默认情况下,它显示为“ 打开App.js以开始在您的应用上工作 ”,我同意这不是Expo可以提供的最好的欢迎信息,但我们将按照他们所说的去做。 让我们打开App.js文件,如下所示:

    import { StatusBar } from 'expo-status-bar';
    import React from 'react';
    import { StyleSheet, Text, View } from 'react-native';
    export default function App() {
    return (
    <View style={styles.container}>
    <Text>Open up App.js to start working on your app!</Text>
    <StatusBar style="auto" />
    </View>
    );
    }
    const styles = StyleSheet.create({
    container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
    },
    });

    Now let me give a concise summary of what’s going on before we move on.

    现在,让我在继续之前简要概述正在发生的事情。

    • The styles variable contains various style dicts of the components

      样式变量包含组件的各种样式指示
    • The Function App is a React Native Functional Component, the default one that renders what we currently see on our screen and above are import statements that import components to be used and composed to create our parent component App.

      Function App是一个React Native Functional Component,它是默认的渲染组件,用于呈现我们当前在屏幕上和上方看到的内容,这些import语句用于导入要使用并组成的用于创建父组件App的组件。

    4.添加国家列表 (4. Add List of Countries)

    Let’s move on and rewrite this dummy screen with our own UI. As we mentioned before, we are going to display a list of countries. For this, we need to implement the following:

    让我们继续并使用我们自己的UI重写此虚拟屏幕。 如前所述,我们将显示国家列表。 为此,我们需要实现以下内容:

    import React from 'react';
    import { StyleSheet, Text, FlatList } from 'react-native';
    export default function App() {
    const countriesData = [{"name":"Afghanistan"},{"name":"Åland Islands"},{"name":"Albania"},{"name":"Algeria"}]
    return (
    <FlatList
    data={countriesData}
    contentContainerStyle={styles.container}
    keyExtractor={item => item.name}
    renderItem={({item})=> <Text style={styles.text}>{item.name}</Text>}
    />
    );
    }
    const styles = StyleSheet.create({
    container: {
    paddingTop: 30,
    },
    text: {
    fontSize: 20,
    margin: 10
    },
    });

    As you can see, we have updated our App.js and added a few things:

    如您所见,我们已经更新了App.js并添加了一些内容:

    • A Flatlist to display the list of countries

      一个Flatlist,显示国家的名单

    • A dummy dataset to display to be displayed on the list

      要显示在列表上的虚拟数据集
    • We updated the style object to contain the style for our text

      我们更新了样式对象以包含文本的样式

    Run your app if you haven’t started it already, and you should be seeing this:

    如果尚未启动应用程序,请运行它,并且应该会看到以下信息:

    Image for post

    We now have something to work with. But the data is static and we would like a longer dynamic list, that can change and we need those changes to be reflected in the UI. So we need the UI to be “reactive” to the changes in the data model. This is the core concept of React, and therefore React Native. So we need to introduce the State concept.

    现在,我们需要处理一些事情。 但是数据是静态的,我们想要更长的动态列表,它可以更改,我们需要将这些更改反映在UI中。 因此,我们需要UI对数据模型的更改“ React式 ”。 这是React的核心概念,因此也是React Native的核心概念。 因此,我们需要介绍国家概念。

    A React Native component holds data in its state, and whenever the state changes, the UI is re-rendered to reflect those changes. Let’s add a state variable, named countriesData which will store the dynamic list of countries displayed on the screen.

    React Native组件将数据保持在其状态中,并且只要状态发生更改,UI就会重新呈现以反映这些更改。 让我们添加一个名为countriesData的状态变量,该变量将存储屏幕上显示的国家的动态列表。

    const [countriesData, setCountriesData] = useState([])

    The useState is called a “hook” in React Native. According to official React documentation on hooks

    useState在React Native中被称为“挂钩”。 根据有关钩子的官方React 文档

    A Hook is a special function that lets you “hook into” React features

    挂钩是一项特殊功能,可让您“挂钩” React功能

    We just declared a state for our app countriesData with default value as an empty array [] and a function setCountriesData to update the value of countriesData. For example, calling setCountriesData([1,2,3,]) will update the value of countriesData to [1,2,3,].

    我们刚刚宣布的状态我们使用默认值作为空数组[]和功能setCountriesData更新countriesData的价值应用countriesData。 例如,调用setCountriesData([1,2,3,])将更新countriesData至[1,2,3,]的值。

    Another important hook useEffect is going to be applied in the following code snippet. Simply put, any code written inside the useEffect runs when the component is mounted.

    另一个重要的钩子useEffect将在以下代码段中应用。 简而言之,当组件被安装时,在useEffect中编写的任何代码都将运行。

    import React, {useState, useEffect} from 'react';
    import { StyleSheet, Text, FlatList, Pressable, Alert } from 'react-native';
    import { StatusBar } from 'expo-status-bar';
    export default function App() {
    const [countriesData, setCountriesData] = useState([])
    function fetchCountriesData() {
    fetch('https://restcountries.eu/rest/v2/region/africa?fields=name;capital')
    .then((response) => response.json())
    .then((json) => setCountriesData(json))
    .catch((error) => console.error(error))
    }
    useEffect(()=> {
    fetchCountriesData();
    })
    return (
    <>
    <StatusBar style='light'/>
    <FlatList
    data={countriesData}
    contentContainerStyle={styles.container}
    keyExtractor={item => item.name}
    renderItem={({item})=> <Text onPress={() => {Alert.alert(`The Capital of ${item.name} is ${item.capital}`)}} style={styles.text}>{item.name}</Text>}
    />
    </>
    );
    }
    const styles = StyleSheet.create({
    container: {
    paddingTop: 30,
    backgroundColor: '#483D8B'
    },
    text: {
    fontSize: 18,
    margin: 5,
    color: '#fff'
    },
    });

    Please don’t be scared of what’s going on. We are using the fetch API to retrieve countries data from an API endpoint and display a list of African countries. The fetch API is how you make network requests in React Native. As you can notice, we’ve used a free API endpoint, exposed on the restcountries.eu website. This returns a JSON object, parsed in the then() clause of the fetch method. Once parsed successfully, we update the countriesData state variable with the new list of country, newly retrieved. As a result of updating the state object, the UI also gets re-rendered and we can see the countries on the screen:

    请不要害怕发生了什么。 我们正在使用访存API从API端点检索国家/地区数据并显示非洲国家/地区列表。 提取API是您在React Native中发出网络请求的方式。 如您所见 ,我们使用了一个免费的API端点,该端点公开于restcountries.eu网站。 这将返回一个JSON对象,该对象在fetch方法的then()子句中进行了解析。 成功解析后,我们将使用新获取的国家/地区新列表更新countryData状态变量。 更新状态对象的结果是,UI也被重新渲染,我们可以在屏幕上看到国家/地区:

    5.设计您的第一个React Native应用程序 (5. Styling Your First React Native App)

    Let’s now focus on making the design of the app slightly better, since we already have the core functionality in place. We are going to focus on styling the app and our focus is on the styles dictionary.

    现在,让我们专注于使应用程序的设计稍微好一些,因为我们已经具备了核心功能。 我们将专注于样式化应用程序,而我们专注于样式字典。

    import React, {useState, useEffect} from 'react';
    import { StyleSheet, Text, FlatList, Pressable, Alert } from 'react-native';
    import { StatusBar } from 'expo-status-bar';
    export default function App() {
    const [countriesData, setCountriesData] = useState([])
    function fetchCountriesData() {
    fetch('https://restcountries.eu/rest/v2/region/africa?fields=name;capital')
    .then((response) => response.json())
    .then((json) => setCountriesData(json))
    .catch((error) => console.error(error))
    }
    useEffect(()=> {
    fetchCountriesData();
    })
    return (
    <>
    <StatusBar style='light'/>
    <FlatList
    data={countriesData}
    contentContainerStyle={styles.container}
    keyExtractor={item => item.name}
    renderItem={({item})=> <Text onPress={() => {Alert.alert(`The Capital of ${item.name} is ${item.capital}`)}} style={styles.text}>{item.name}</Text>}
    />
    </>
    );
    }
    const styles = StyleSheet.create({
    container: {
    paddingTop: 30,
    backgroundColor: '#483D8B'
    },
    text: {
    fontSize: 18,
    margin: 5,
    color: '#fff'
    },
    });

    As you can see, we’ve changed the color of the background to purple, by providing the backgroundColor attribute with ‘#483D8B’ hex code.

    如您所见,通过为backgroundColor属性提供'#483D8B'十六进制代码,我们将背景色更改为紫色。

    While the syntax is very similar to CSS, it is slightly different. But the core concepts are the same, so if you already know CSS, learning how to style React Native apps will be extremely easy. Especially if you are already familiar with flexbox layout.

    虽然语法与CSS非常相似,但略有不同。 但是核心概念是相同的,因此,如果您已经了解CSS,那么学习如何设计React Native应用程序样式将非常容易。 特别是如果您已经熟悉flexbox布局

    Image for post

    结论 (Conclusion)

    We saw what are the biggest sell points for using React Native in your mobile development process, and how easy it is to create apps for both iOS and Android.

    我们看到了在移动开发过程中使用React Native的最大卖点是什么,以及为iOS和Android创建应用程序有多么容易。

    We’ve set up Expo, which is an amazing tool for beginners who are new to the React Native world. We then leveraged Expo to create our first React Native project.

    我们已经设置了Expo,对于刚接触React Native的初学者来说,这是一个了不起的工具。 然后,我们利用Expo来创建我们的第一个React Native项目。

    After that, we learned about functional components, hooks and state. We’ve used the fetch API to retrieve data via a network request, and we styled the visual components by modifying the stylesheet.

    之后,我们学习了功能组件,挂钩和状态。 我们已经使用fetch API通过网络请求检索数据,并且通过修改样式表来设置可视化组件的样式。

    Congratulations! You were able to build a React Native app. Now it’s time to learn more advanced concepts, in order to add more complex functionalities and develop fully functional mobile apps, that you can publish to the App Store and Google Play Store. Check out this list of the best React Native resources to learn more about React Native and dive into the next level.

    恭喜你! 您能够构建一个React Native应用程序。 现在是时候学习更高级的概念,以添加更多复杂的功能并开发功能齐全的移动应用程序,您可以将其发布到App Store和Google Play商店中。 查看最佳React Native最佳资源列表,以了解有关React Native的更多信息并进入下一个层次。

    下一步 (Next Steps)

    Now that you have learned about best React Native development tools, here are some other topics you can look into

    现在您已经了解了最佳的React Native开发工具,下面是您可以研究的其他一些主题

    If you need a base to start your next React Native app, you can save months of development by leveraging one of our React Native templates.

    如果您需要基础来启动下一个React Native应用程序,则可以利用我们的React Native模板之一节省数月的开发时间。

    Originally published at https://www.instamobile.io on July 24, 2020.

    最初于 2020年7月24日 https://www.instamobile.io 发布

    翻译自: https://medium.com/javascript-in-plain-english/react-native-tutorial-build-your-first-react-native-app-af66345c5e63

    展开全文
  • 学习永不止步,开始搭建ReactNative开发环境了。 项目环境搭建 项目环境搭建,我查看了这篇文章:https://www.jianshu.com/p/12674aa384a1 遇到了不少问题,但是经过百度,最终还是很快的解决了问题,详细问题,请看...

    原文地址:https://www.yundashi168.com/341.html

    学习永不止步,开始搭建ReactNative开发环境了。

    项目环境搭建

    项目环境搭建,我查看了这篇文章:https://www.jianshu.com/p/12674aa384a1
    遇到了不少问题,但是经过百度,最终还是很快的解决了问题,详细问题,请看下文的经验总结

    项目运行成功

    运行项目

    项目运行成功的标记,如果没有运行成功,请认真查看控制台的报错信息。

    在自己的手机上查看项目运行效果:

    经验总结

    • 第一点: android sdk 环境变量一定要去配置一下。

    image.png

    path环境变量:

    %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools
    

    image.png

    环境变量路径,因为我的sdk路径在c盘,你们可以更换你们自己的android sdk路径。

    cmd 中输入adb命令查看环境变量是否配置

    • 第二点:可以选择不安装android 模拟器;但是你的手机设备需要连接到电脑上。而且手机和电脑要处于一个网络段,就是手机能访问到电脑的端口。如果无法访问的话,手机上的项目就无法运行,切忌。

    确保手机网络能访问电脑端口

    还有一点,需要检查下对应的端口是否开启成功了。Running就是代表运行成功。

    Running Metro Bundler on port 8081.

    image.png

    • 第三点: ReactNative版本0.59.8 需要Android gradle 插件版本为 3.3.1
      Gradle需要是4.10.2版本。所以,你安装的时候,如果出现什么问题,请一定要核查它们之间的版本对应关系。
      刚开始运行项目的时候,因为版本不对报了错误
    Could not get unknown property ‘mergeResourcesProvider’
    

    后面看了这篇文章https://blog.csdn.net/mo_feng_/article/details/89675923
    ,才发现要核对版本号。解决了问题。

     dependencies {
            classpath 'com.android.tools.build:gradle:3.3.1'
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    

    image.png

    image.png

    • 第四点:注意在项目根路径下的配置下android.enableAapt2=false。

    image.png

    参考文章:
    https://blog.csdn.net/yy11534/article/details/79608533

    原文地址:http://cloud.yundashi168.com/archives/555

    展开全文
  • 一份由Handlebar Labs创建的所有React Native教程索引
  • 用于React Native的UI工具集和组件库 查看我们的。 我们的 下载我们的Expo演示应用 (您将需要Expo App) 正在安装 请参阅安装说明。 新的主要版本5.0 查看 对于React Native> = 0.60.0 请使用react-native-ui-...
  • ReactNative教程

    2016-08-23 15:37:34
    React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP。 React Native着力于提高多平台开发的开发效率 —— 仅需学习一次,编写任何平台。(Learn once, write ...

    传说中

    React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP。

    React Native着力于提高多平台开发的开发效率 —— 仅需学习一次,编写任何平台。(Learn once, write anywhere)

    Facebook已经在多项产品中使用了React Native,并且将持续地投入建设React Native。

    当然。。还需要时间来检验,以下是转载的学习的视频连接。

    http://reactnative.cn/post/759

    展开全文
  • react-native-starter:来自https://www.udemy.comcourse的React Native教程thecomplete-react-native-and-redux-course
  • rn-chat-app:聊天应用程序-Spencer Carli编写的React Native教程+一些升级
  • 首先按照开发环境搭建教程来安装React Native在安卓平台上所需的一切依赖软件(比如npm)。!!! 1. 设置项目目录结构 首先创建一个空文件夹(名字英语就行),然后把自己的原有项目放进来就行。!!! 2. ...

    开发环境准备

    首先按照开发环境搭建教程来安装React Native在安卓平台上所需的一切依赖软件(比如npm)。!!!

    1. 设置项目目录结构

    首先创建一个空文件夹(名字英语就行),然后把自己的原有项目放进来就行。!!!

    2. 安装JavaScript依赖包

    在项目根目录(就是在刚创建的空文件夹下、和Android项目同一级别)下创建一个名为package.json的空文本文件,然后填入以下内容:

    (也可以使用命令符创建 : cd 文件夹名进入根目录,然后输入:npm init  按回车,就可以一行一行输入数据)

    {
      "name": "MyReactNativeApp",
      "version": "0.0.1",
      "private": true,
      "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start"
      },
      "dependencies": {
        "react": "16.0.0-alpha.6",
        "react-native": "0.44.3"
      }
    }
    

    示例中的version字段没有太大意义,name很重要!!!记住这个名字!!!(好像大写会报错)。本文无法在这里列出所有react native和对应的react版本要求,只能提醒读者先尝试执行npm install,然后注意观察安装过程中的报错信息,例如require react@某.某.某版本, but none was installed,然后根据这样的提示,执行npm i -S react@某.某.某版本。如果你使用多个第三方依赖,可能这些第三方各自要求的react版本有所冲突,此时应优先满足react-native所需要的react版本。


    本人在这一段踩的是name的值大写、txt文本编辑时“”( 双引号 )会提示格式错误。只要这个配合没啥格式上的毛病就可以进行下一步了。

    接下来我们使用npm(node包管理器,Node package manager)来安装React和React Native模块。 请打开一个终端/命令提示行,进入到项目目录中(即包含有package.json文件的目录),然后运行下列命令来安装:

    $ npm install
    

    这些模块会被安装到项目根目录下的node_modules/目录中(所有通过npm install命令安装的模块都会放在这个目录中。这个目录我们原则上不复制、不移动、不修改、不上传,随用随装)。

    把React Native添加到你的应用中

    配置maven

    用Android studio打开你的项目(就是单纯的打开项目就行),然后在 build.gradle 文件中添加 React Native 依赖:

     dependencies {
         ...
         compile "com.facebook.react:react-native:+" // From node_modules.
     }
    

    如果想要指定特定的React Native版本,可以用具体的版本号替换 +,当然前提是你从npm里下载的是这个版本 。 

    在项目的 build.gradle 文件中为 React Native 添加一个 maven 依赖的入口,必须写在 "allprojects" 代码块中:

    allprojects {
        repositories {
            ...
            maven {
                // All of React Native (JS, Android binaries) is installed from npm
                url "$rootDir/../node_modules/react-native/android"
            }
        }
        ...
    }
    

    确保依赖路径的正确!以免在 Android Studio 运行Gradle同步构建时抛出 “Failed to resolve: com.facebook.react:react-native:0.x.x" 异常。

    配置权限

    接着,在 AndroidManifest.xml 清单文件中声明网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
    

    如果需要访问 DevSettingsActivity 界面(即真机摇晃出开发者菜单),则还需要在 AndroidManifest.xml 中声明:

    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    

    开发者菜单一般仅用于在开发时从Packager服务器刷新JavaScript代码,所以在正式发布时你可以去掉这一权限。


    集成代码

    1. 创建一个index.android.js文件

    首先在项目根目录中创建一个空的index.android.js文件。

    index.android.js是React Native应用在Android上的入口文件。而且它是不可或缺的!它可以是个很简单的文件,简单到可以只包含一行require/import导入语句。本教程中为了简单示范,把全部的代码都写到了index.android.js里(当然实际开发中我们并不推荐这样做)。

    2. 添加你自己的React Native代码

    index.android.js中添加你自己的组件。这里我们只是简单的添加一个<Text>组件,然后用一个带有样式的<View>组件把它包起来。

    'use strict';
    
    import React from 'react';
    import {
      AppRegistry,
      StyleSheet,
      Text,
      View
    } from 'react-native';
    
    class HelloWorld extends React.Component {
      render() {
        return (
          <View style={styles.container}>
            <Text style={styles.hello}>Hello, World</Text>
          </View>
        )
      }
    }
    var styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
      },
      hello: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
      },
    });
    
    AppRegistry.registerComponent('MyReactNativeApp', () => HelloWorld);

    3、创建MyReactActivity

    如果你想在安卓5.0以下的系统上运行,请用 com.android.support:appcompat 包中的 AppCompatActivity 代替 Activity 。

    public class MyReactActivity extends Activity implements DefaultHardwareBackBtnHandler {
        private ReactRootView mReactRootView;
        private ReactInstanceManager mReactInstanceManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            mReactRootView = new ReactRootView(this);
            mReactInstanceManager = ReactInstanceManager.builder()
                    .setApplication(getApplication())
                    .setBundleAssetName("index.android.bundle")
                    .setJSMainModuleName("index.android")
                    .addPackage(new MainReactPackage())
                    .setUseDeveloperSupport(BuildConfig.DEBUG)
                    .setInitialLifecycleState(LifecycleState.RESUMED)
                    .build();
    
            // 注意这里的MyReactNativeApp必须对应“index.android.js”中的
            // “AppRegistry.registerComponent()”的第一个参数
            mReactRootView.startReactApplication(mReactInstanceManager, "MyReactNativeApp", null);  
    
            setContentView(mReactRootView);
        }
    
        @Override
        public void invokeDefaultOnBackPressed() {
            super.onBackPressed();
        }
    }
    

    使用的是 Android Studio , 可以使用Alt + Enter快捷键来自动为MyReactActivity类补上缺失的import语句。

    我们需要把 MyReactActivity 的主题设定为 Theme.AppCompat.Light.NoActionBar ,因为里面有许多组件都使用了这一主题。

     <activity
       android:name=".MyReactActivity"
       android:label="@string/app_name"
       android:theme="@style/Theme.AppCompat.Light.NoActionBar">
     </activity>

    下一步我们需要把一些activity的生命周期回调传递给ReactInstanceManager

    @Override
    protected void onPause() {
        super.onPause();
    
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onHostPause(this);
        }
    }
    
    @Override
    protected void onResume() {
        super.onResume();
    
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onHostResume(this, this);
        }
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
    
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onHostDestroy();
        }
    }
    

    我们还需要把后退按钮事件传递给React Native:

    @Override
     public void onBackPressed() {
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onBackPressed();
        } else {
            super.onBackPressed();
        }
    }
    


    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) {
            mReactInstanceManager.showDevOptionsDialog();
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }
    

     配置权限以便开发中的红屏错误能正确显示

    如果你的应用会运行在Android 6.0(API level 23)或更高版本,请确保你在开发版本中有打开悬浮窗(overlay)权限。If your app is targeting the Android API level 23 or greater, make sure you have the overlay permission enabled for the development build. You can check it with Settings.canDrawOverlays(this);. This is required in dev builds because react native development errors must be displayed above all the other windows. Due to the new permissions system introduced in the API level 23, the user needs to approve it. This can be acheived by adding the following code to the Activity file in the onCreate() method. OVERLAY_PERMISSION_REQ_CODE is a field of the class which would be responsible for passing the result back to the Activity.

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (!Settings.canDrawOverlays(this)) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                                       Uri.parse("package:" + getPackageName()));
            startActivityForResult(intent, 0);
        }
    }
    

    Finally, the onActivityResult() method (as shown in the code below) has to be overridden to handle the permission Accepted or Denied cases for consistent UX.

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 0) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (!Settings.canDrawOverlays(this)) {
                    // SYSTEM_ALERT_WINDOW permission not granted...
                }
            }
        }
    }
    

    现在activity已就绪,可以运行一些JavaScript代码了。

    测试集成结果#

    You have now done all the basic steps to integrate React Native with your current application. Now we will start the React Native packager to build the index.android.bundle package and the server running on localhost to serve it.

    1. 运行Packager

    运行应用首先需要启动开发服务器(Packager)。你只需在项目根目录中执行以下命令即可:

    $ npm start
    
    2. 运行你的应用

    保持packager的窗口运行不要关闭,然后像往常一样编译运行你的Android应用(在命令行中执行./gradlew installDebug或是在Android Studio中编译运行)。

    如果你是使用Android Studio来编译运行,有可能会导致packager报错退出。这种情况下你需要安装watchman。但是watchman目前没有稳定的Windows版本,所以在Windows下这种崩溃情况暂时没有特别好的解决方案。

    编译执行一切顺利进行之后,在进入到MyReactActivity时应该就能立刻从packager中读取JavaScript代码并执行和显示:

    Screenshot



    在Android Studio中打包

    Android studio正常的打包流程就行,如果第一次打包需要创建签名文件,可以看这里Android Studio 生成签名文件

    OK,到此我们已经生成APK。 一安装APK运行发现APK直接BOOM。 
    为什么????? 
    因为平时DEBUG模式下链接的是我们本地的服务器拉去的JS文件,此时的APK包并没有将JSBundle打入APK。 

    接下来,我们将JS(即生成离线的jsbundle文件)资源等一起打入APK。

     具体的js打包命令如下:
    $ react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/com/your-company-name/app-package-name/src/main/assets/index.android.bundle --assets-dest android/com/your-company-name/app-package-name/src/main/res/
    

    注意把上述命令中的路径替换为你实际项目的路径。如果assets目录不存在,则需要提前自己创建一个。

    创建assets

    进入项目主目录 执行命令 
    mkdir -p android/app/src/main/assets 

    这里写图片描述
    此刻我们将在main目录下生成assets文件夹,用于存储index.android.bundle… 

    • index.android.bundle是什么???  
      用于存储JS的本地文件,我们打的离线包将从其中读取资源等。

    第二步:生成index.android.bundle文件

    react-native bundle --platform android --dev false --entry-file index.android.js 
    --bundle-output android/app/src/main/assets/index.android.bundle 
    --assets-dest android/app/src/main/res/ 

    这里写图片描述

    OK! 文件生成,我们在重新执行一次Android Studio的打包流行,安装APK 即可运行离线包。

    然后在Android Studio中正常生成release版本即可!



    展开全文
  • 无涯教程网(learnfk)整理提供:React Native是Facebook早先开源的JS框架React在原生移动应用平台,支持iOS和安卓
  • React Native教程

    2017-06-16 22:52:00
    React Native 中文网 http://reactnative.cn/ 相关资料======================= React-Native学习指南 https://github.com/reactnativecn/react-native-guide 教程 React Native React.js ES6 系列教程 ...
  • 尽管您可以使用 Webpack 做到这一点,但 React Native 中包含的器做得更好,并且它已融入 。 这种类型的构建只能用作兼容性的最后手段。 一个react-three-fiber的示例有: 网络包 5 React本机 react-native-web ...
  • React Native官方入门教程

    千次阅读 2016-05-18 17:22:23
    在编写写关于获取远程数据的代码之前,先让我们模拟一些数据,以便上手React Native。在Facebook(公司),我们的做法是一般在JS文件的顶部声明常量,下面接着就是一些import。当然你可以在index.ios.js或index.....
  • React Native 中的二维码扫描器 这个应用程序是使用 React Native 制作的。 安装 将此 Repo 克隆到您的 PC 运行npm install 运行应用程序 内置 React本机 react-native-qrcode-scanner 教程 作者 比利时 Android -...
  • 第1章 介绍课程目标和学习内容包括...1-1 课程导学第2章 知识储备2-1 介绍React开发环境2-2 ES6常用语法2-3 express+mongodb基础2-4 express+mongodb基础第3章 React基础知识回顾3-1 React基础知识回顾1-入门例子3-2...
  • https://juejin.im/post/5a9602745188257a5c609b2f http://www.ruanyifeng.com/blog/2016/09/react-technology-stack.html
  • 01.JavaScript基础 02.ECMAScript 新功能 03.React 基础 04.React 路由 05React Native基础知识 06.React Native进阶 07.R React Native高级 08ECMAScript 2105(es6) 09React Native视频教程-项目实战
  • React Native教程 这是一个例子React以下Pluralsight教程可用本机应用程序 设置您的环境 安装Brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,192
精华内容 4,476
关键字:

reactnative教程