当 Kotlin 爱上 React

Kotlin 能用来开发 React Native 吗? 0. 引子前段时间出去休了半个月假,公众号文章史无前例的断了一周,不过不要紧,我这不是又回来了嘛。摄于:清境农场闲话少说,既然 Kotlin 可以编译为 Js,那么我们很... 阅读详情

本文首发于 youngxhui.top

说起 Kotlin,听说过的大部人第一反应是一门开发 Android 的语言。不得不说 Google 对 Kotlin 的宣传远远的大于了 Kotlin 的创始公司 Jetbrains 。

Kotlin 不仅仅是能写Android,而且可以写服务端,可以说只要可以写Java的地方,就可以用Kotlin来进行替换。当然Kotlin远不止这些。目前Kotlin可以做到以下平台的开发和使用。jvm,android,js和native(beta)。正因为可以开发 Native ,所以Kotlin现在对 ios 开发也是支持的,虽然看起来效果不是那么的好。

今天进行的 Kotlin 进行 react 开发,这只是对 KotlinJs 的一次尝试和使用。

环境

  • 浏览器:Microsoft Edge 77.0.235.5 (官方内部版本) dev(64 位)

  • Kotlin: 1.3.12

安装环境

很早以前,kotlin 官网就出现了两个库,这两个库基本就是来完善 react 在 kotlin 中的生态,第一个是 JetBrains/create-react-kotlin-app ,一个生成 React 工程的脚手架;第二个是JetBrains/kotlin-wrappers ,该库里存放了 react 周边生态组件,比如说 router,redux 等等。

按照脚手架文档,一行代码便能生成我们的项目。

npx create-react-kotlin-app my-app

在项目生成后,打开项目,使用 npm start 或者 yarn start 启动项目。

项目会自动打开浏览器,然后看到我们的项目,说明我们的项目便启动了。

我们可以看看官方提供的 wrappers 库里有什么,好像什么都有就是缺少一个成熟的 UI 组件库。难道说所有的样式都要我们自己写?

当然不是。

kotlinjs 是可以调用到 nodejs 模块的,只不过啊,有点烦。

安装 ant

ant 是 阿里前端 开发的一套 UI 组件,其中有着 React 版本。首先要安装该库。

通过 yarn add antd 进行安装,等待安装完成。

安装结束后,我们将 ant的演示引入到我们的项目中,打开 index.css 引入项目。

@import '~antd/dist/antd.css';

我们尝试的引入一个 Button 看看。

然后我们看到页面上,还是原来的button ,和 ant 的风格没有半毛钱关系。说明我们还是没有讲ant的组件使用到我们的项目中去。

绑定 UI 控件

新建立一个包 ui/ant 来存放我们与 ant 组件的绑定类。

如何编写我们的绑定类?这是我遇到的第一个难题。

首先要找到我们的 node_modules中的antd目录,找到我们要绑定的控件目录。

我们用 @file:JsModule("antd/lib/button") 来表明绑定目录。通过 @JsName("default") 来进行绑定,此时需要该控件是以 export default Button;

@file:JsModule("antd/lib/button")

package ui.ant

import react.RClass
import react.RProps

@JsName("default")
external val button: RClass<RProps>

在我们的 Main.kt 中重新引入我们刚刚写的 button。此时的 button 不同于 react.dom.button ,我们所声明的 button 无法直接设置任何属性,方法等。当然我们会给他设置的。

package app

import react.RBuilder
import react.RComponent
import react.RProps
import react.RState
import react.dom.div

class App : RComponent<RProps, RState>() {
    override fun RBuilder.render() {
        div {
            ui.ant.button {
                +"Button"
            }
        }
    }
}

fun RBuilder.app() = child(App::class) {}

等待自动编译和刷新完成,查看我们的页面。

终于见到了我们的按钮了,而且样式和 Ant 官方文档上所示一致。

说明我们的绑定现在已经成功。

然后如法炮制,把其他的要使用控件进行同样的绑定。

我们 input 和 search 进行绑定。

此次绑定与上次有所改变,我们对这两个属性可以设置一些值,以便我们在 HTML DSL 中直接使用。这里我们通过实现 RProps 来重新定制了我们要使用的属性,对 Input 设置了一个 placeholder,而 SeacherRPorps 可以直接继承 InputRProps 来进行属性上的扩展。

@file:JsModule("antd/lib/input/Input")

package ui.antd

import react.*

external interface InputRProps:RProps {
    var placeholder:String
}

@JsName("default")
external val input: RClass<InputProps>

对 search 控件进行绑定

@file:JsModule("antd/lib/input/Search")
 
package ui.antd

import org.w3c.dom.events.Event

import react.*

external interface SearchProps : InputRProps {
    var onChange: (Event) -> Unit
    var value: String
}

@JsName("default")
external val search: RClass<SearchProps>

新建独立控件

我们重新独立出来一个组件,叫做 Home.kt 。将我们的 Button 存放进去,然后在 App.kt 上 使用 Home.kt。

package home

import react.RBuilder
import react.RComponent
import react.RProps
import react.RState
import react.dom.div
import ui.ant.button

class Home : RComponent<RProps, RState>() {
    override fun RBuilder.render() {
        div{
           button{
               +"Button"
           }
        }
    }
}

fun RBuilder.home() = child(Home::class) {}

等待页面刷新完毕,仍旧是原来的样子。

添加点击事件

因为我们的按钮中没有声明点击事件,所以无法直接调用,但是 kotlinjs 可以动态属性调用,通过 asDynamic 便可以调用我们想要使用的任何 html 中存在的属性。

 button {
	+"Button"
	attrs {
		asDynamic().onClick = {
			console.log("on click")
		}
	}
}

此时就完成了按钮的点击事件,当我们在页面中点击时,可以看到浏览器控制台上的信息进行打印。

进行双向绑定

对我们要使用的数据存放在 RState 中,我们重写来写 RState。 state 和 props 是 react 中两个重要的属性,state 是用来进行内部数据的修改更新,而 props 是可以将外部数据进行传入。

自定义 HomeState 来继承 RState,来进行对内部数据的修改。

interface HomeState : RState {
    var inputValue: Int
}

将我们 Home 中的 RState 类型改为 HomeState

class Home : RComponent<RProps, HomeState>()

这样便可以在下方使用 state 中的数据。

用一个 div 来写我们的数据。

div {
	+"${state.inputValue}"
}

对 button 中的点击事件进行微小的修改,在 react 中对数据进行修改都需要调用 setState 。

button {
	+"Button"
	attrs.asDynamic().onClick ={
		setState {
			inputValue += 1
		}
	}
}

然而,页面刷新后却是一个报错。TypeError: Cannot read property ‘toString’ of undefined 无法读取 undefinded 的 toString 方法。

原来,单在 HomeState 中声明是不够的,还需要在 HomeState.init() 的重写方法中进行初始值的赋值。

重新等待页面刷新,出现了我们预想的结果。每次点击按钮就会数字就会进行累加。

配合 Axios

axios 是前端中常用的一个 http 请求框架,kotlin 官方已经对它进行了一次简单的封装。我们这里直接就可以使用。

首先仍旧是先安装 axios

yarn add axios

安装完成后新建一个文件夹axios,再新建Axios.js。

package axios

import kotlin.js.Promise

@JsModule("axios")
external fun <T> axios(config: AxiosConfigSettings): Promise<AxiosResponse<T>>

// Type definition
external interface AxiosConfigSettings {
    var url: String
    var method: String
    var baseUrl: String
    var timeout: Number
    var data: dynamic
    var transferRequest: dynamic
    var transferResponse: dynamic
    var headers: dynamic
    var params: dynamic
    var withCredentials: Boolean
    var adapter: dynamic
    var auth: dynamic
    var responseType: String
    var xsrfCookieName: String
    var xsrfHeaderName: String
    var onUploadProgress: dynamic
    var onDownloadProgress: dynamic
    var maxContentLength: Number
    var validateStatus: (Number) -> Boolean
    var maxRedirects: Number
    var httpAgent: dynamic
    var httpsAgent: dynamic
    var proxy: dynamic
    var cancelToken: dynamic
}

external interface AxiosResponse<T> {
    val data: T
    val status: Number
    val statusText: String
    val headers: dynamic
    val config: AxiosConfigSettings
}

我们做一个简单的应用,通过输入名字,到 Github 上寻找相关的仓库。

首先定义我们的数据类,来存放我们请求获取到的数据。

data class Result(
        val total_count: Int,
        val items: Array<Item>
)

data class Item(val id: Long,
                val node_id: String,
                val name: String,
                val full_name: String,
                val html_url: String)

然后在 HomeState 中声明所使用的类。

interface HomeState : RState {
    var inputValue: String
    var repos: Array<Item>
}

下面是界面定义的代码

div(classes = "search-input") {
    search {
        attrs {
            onChange = {
                val element = it.target as HTMLInputElement
                setState {
                    inputValue = element.value
                }
            }
            placeholder = "请输入 Github 仓库名称"
        }
    }
}

button {
    +"搜索"
    attrs {
        asDynamic().onClick = {

        }
    }
}

div(classes = "list") {
    if (state.repos.isNotEmpty()) {
        ul {
            for ((index, item) in state.repos.withIndex()) {
                li {
                    a(href = item.html_url) {
                        +"${index + 1} / ${item.full_name}"
                    }
                }
            }
        }
    }
}

不过当我们此时预览界面的时候,发现又又又错了,提示 repos 无法进行迭代。

明明是数组为什么无法迭代呢?原来是在 Home 组件创建的时候,还没有对 repos 进行初始化。这里需要了解 react 的生命周期,在组件建立前,对数据进行初始化。

    override fun componentWillMount() {
        setState {
            repos = emptyArray()
        }
    }

此时页面可以正常展示了。

完善 button 的点击事件。

 button {
    +"搜索"
    attrs {
        asDynamic().onClick = {
            //https://api.github.com/search/repositories?q=
            val config: AxiosConfigSettings = jsObject {
                url = "https://api.github.com/search/repositories?q=${state.inputValue}"
            }
            axios.axios<Result>(config).then { response ->
                setState {
                    repos = response.data.items
                }
            }.catch { error ->
                console.log("error", error)
            }
        }
    }
}

此时便完成了项目。

总结

首先声明 作者并非专业前端,所以文章中有错误还望指正;本文更重要的目的是为了表明 kotlin 在其他领域的使用和使用体验。

kotlin 写 react,在书写习惯上应该和 ts 写是差不多的,而且给后端同学带来了写前端的体验。但是生态不完整,就一个 UI 组件库没有一个官方用 kt 写的,而且编译速度慢,报错有时不明显,可查阅资料少。不过要说硬着头皮开发,个人感觉是完全可以的,不过估计要自己造不少轮子。

iOS设备MDM锁与屏幕锁移除:iMyFone LockWiper原理与实战指南 移动设备管理(MDM)是企业保障数据安全、统一部署应用的核心技术,通过配置策略实现对iOS等设备的远程管控。其原理基于设备在激活时向MDM服务器注册并接收描述文件,从而在系统层面实施管理。当设备流转或员工离职时,遗留的MDM锁会阻碍设备正常使用,形成“企业监管”状态。为解决此类问题,出现了专注于iOS设备解锁的第三方工具,它们通常通过引导设备进入DFU或恢复模式,刷入修改版固件,在系统激活流程中拦截或删除MDM配置文件,从而实现移除。这类技术方案为IT资产管理、二手设备合规再利用提供了可能的解决路径,但需在 阅读详情

相关推荐

三维模型转变为点云模型的好工具——CloudCompare使用小记

普通三维模型能够直观地展示物体的三维全貌,但是在一些场合需要将三维模型变为相应的点云模型进行展示,而使用激光雷达等传感器采集到的点云信息往往只能反应模型表面的情况,或是使用PCL库中的可执行文件进行转换,这两种操作较为麻烦。笔者最近就遇到了这样一个情况,找到了一个名叫CloudCompare(CC)的软件,能够支持将多种文件格式的三维模型转变为点云模型。以下将本人在使用过程中所使用到的一些操作简记下来供朋友们和将来的自己参考。 一、下载 CloudCompare是一款免费软件,其可以在CloudComp

hdlwyt的博客 2万+

Kotlin For React创建一个React项目

Kotlin Kotlin 是一门优秀的开发语言。它被广泛应用于Android开发,Google公司在2017年开发者大会中宣布了在Android上为Kotlin提供一等支持。但Kotlin的优秀不仅仅如此,JetBrains公司在设计这门语言之初就设想将它作为一门全能型开发语言使用。它不仅兼容Java语言并且继承了Java语言的一些特点,同时也继承了JavaScript语言的一些特点,使得它可以很好的编译成JavaScript代码。 React React 起源于 Facebook 的内部项目,是一个用于

破小孩 869

用4690张图片搞定物流仓储难题:手把手教你训练YOLOv8纸箱检测模型(附完整源码)

本文详细介绍了如何利用YOLOv8目标检测技术解决物流仓储中的纸箱识别难题。通过4690张图片构建高质量数据集,提供完整的训练教程和源码,实现98.7%的mAP@0.5准确率。文章涵盖数据采集、模型训练、调参技巧到边缘计算部署的全流程,帮助读者快速构建智能仓储检测系统。

weixin_28717939的博客 378

使用 React 和 Kotlin/JS 构建 Web 应用程序

本文通过相关的数据,演示如何使用和Kotlin/JS构建一个Web全栈应用。通过本文,你将学到如下内容:完成与构建典型 React 应用程序相关的常见任务。探索如何使用 Kotlin 的 DSL 来帮助简洁、统一地表达概念,同时又不牺牲可读性,从而允许您完全用 Kotlin 编写完整的应用程序。了解如何使用现成的 npm 组件、使用外部库以及发布最终应用程序。demo代码地址如下:最终的完整功能,请查看finish分支。

虎哥LoveDroid 1387

告别谷歌!QGC地面站v4.0.x保姆级教程:用高德/天地图瓦片替换老旧地图源

本文提供QGroundControl(QGC)地面站v4.0.x的详细教程,指导用户如何用高德地图和天地图瓦片替换默认地图源,解决数据陈旧、访问不稳定等问题。教程涵盖环境配置、源码修改、地图集成及性能优化,帮助无人机开发者打造稳定高效的中文地图解决方案。

weixin_30836759的博客 503

YOLOv13改进策略【Head】| (独家改进)结合 ICME-2024 中的PPA注意力模块,自研带有注意力机制的小目标检测头

本文记录的是利用PPA (并行补丁感知注意模块)改进YOLOv13的检测头。通过改进传统卷积,形成带有注意力机制的小目标检测头,使模型能够更好地关注小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch size参数实现局部和全局分支的区分,计算非重叠

Limiiiing的博客 480

放弃Javascript-使用kotlin编写react前端应用之todoList

一.相较于typescript,kotlin的优点在于 配合idea,更强大的代码提示 idea编辑器会注明代码块的this指向 更强大的强类型机制 kotlin更优秀的语言机制 二.下面是用kotlin实现todolist应用 核心组件代码 package translate import kotlinext.js.js import kotlinx.html.ButtonType import kotlinx.html.InputType import kotlinx.html.js.onChan

邱权武(isfive)的博客 908

qiankun 主子应用部署教程(Nginx 小白版)

本地开发:不用 Nginx,直接localhost:端口即可。本地模拟线上:用hosts + Nginx + 自定义域名,效果和生产接近。线上部署主应用只要配置 history 模式子应用必须支持 CORS + history + 缓存能跑是因为默认 server 兜底,但推荐写真实域名。主应用 vs 子应用的 Nginx 配置区别为什么本地和线上表现不一样history 模式 + 跨域的最佳实践。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 999

Kotlin:从入门到实战的详细教程

Kotlin 是一种现代的、开源的编程语言,由 JetBrains 开发并开源。它运行在 JVM 上,与 Java 完全兼容,同时支持 JavaScript 和原生编译。Kotlin 的设计目标是提高开发效率、减少代码量,并提供更安全的编程范式。Kotlin 是一种现代且强大的编程语言,适用于 Android 开发、跨平台开发和服务器端开发。通过简洁的语法、空安全机制和跨平台支持,Kotlin 提高了开发效率并减少了错误。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1523

新能源汽车动力总成研发测试技术全景深度报告(2025版)

本文所有企业案例数据均来自上市公司财报、工信部备案信息及权威媒体报道,技术参数经第三方检测报告交叉验证。研发测试人员能力矩阵重构(T型人才进阶路径)[10] 全球动力总成市场2035年预测报告。[9] NI电动汽车HIL测试架构技术文档。[3] 东风汽车智能化研发体系深度报告。[5] 混合动力测功机发明专利技术细节。[1] 领克动力总成试验中心技术解析。[7] 新能源汽车产业迭代趋势白皮书。测试架构师-数字工程。测试架构师-安全合规。测试架构师-人工智能。

优快云-新能源汽车研发测试专业博主 779

用 CORRESPONDING #( ) 优雅复制同名字段:从 MOVE-CORRESPONDING 到现代 ABAP 结构映射的关键差异与最佳实践

摘要:本文深入探讨了SAP ABAP中结构数据复制的两种主要方式——传统MOVE-CORRESPONDING与现代CORRESPONDING #()的核心差异。重点分析了现代构造表达式会初始化目标结构的关键特性,通过SAP_GWFND开发中的实际案例展示了这一差异可能引发的线上问题。同时介绍了使用BASE保留目标字段值的技巧,以及通过MAPPING处理字段名不一致的场景。文章为ABAP开发者提供了在S/4HANA、BTP及RAP等现代架构下的数据映射最佳实践,帮助规避常见的维护陷阱。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2262

当 Kotlin 爱上 React,会产生什么化学反应?

点击蓝色字关注我们!一个努力中的公众号长的好看的人都关注了说起 Kotlin,听说过的大部人第一反应是一门开发 Android 的语言。不得不说 Google 对 Kot...

代码猎奇站 178

2025年下半年网络工程师案例分析真题及答案解析

2025年下半年网络工程师案例分析真题及答案解析

鹿鸣天涯 1093

探索Yaade:5个理由让你爱上这款自主托管的API开发环境

在当今数字化时代,API开发已成为软件开发的核心环节。对于追求数据安全和团队协作的开发者来说,Yaade(Yet Another API Development Environment)提供了一个完美的解决方案——这是一个开源的、自我托管的协作式API开发环境,让你完全掌控自己的API数据。 ## 🚀 什么是Yaade? Yaade是一个专为现代开发者设计的API开发环境,它最大的特点就是*

gitblog_00587的博客 1081

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

初学者应该如何开启自己的编程生涯?,springmvc教程pdf

前端。如果你希望掌握外观,比方说开发好看到让用户爱上的网站,你就应该了解HTML(样子),CSS(外观与感觉),JavaScript(感觉)。不过这还不够,利用纯粹的JavaScript在今天已经不够了,你必须选择合适的框架,比如目前流行的Angular、React和Vue。要选择哪一种主要取决于你最喜欢哪一家公司,是Google还是Facebook?如果你喜欢Google的话,那就用Angular,如果喜欢Facebook的话就用React。如果这两个你都不喜欢(很怪异),那就用Vue吧。简单!除了这些,

m0_60707169的博客 875

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

《HelloGitHub》第 113 期

它能够将你关注或订阅的所有信息,统一整合并以美观的界面展示,支持 RSS 订阅、帖子、新闻、天气、书签、日历、股票、视频更新、网站监控等多种信息源,并且针对移动端做了优化。它能够将 XML 文档解析为易于操作的 DOM 树,并提供读取、修改、生成和保存等功能,适用于嵌入式、游戏、工具开发等场景。:开源的数字取证工具。这是一款免费、开源、跨平台的文件压缩和解压工具,支持超过 200 种压缩格式(7Z、ZIP、RAR、TAR、ISO、Zstd),具备文件压缩、解压、加密、分卷、校验、格式转换和批量操作等功能。

HelloGitHub 的博客 2270

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

如何选择能激发编程兴趣的在线学习平台:四大特征与实战指南

编程学习是一个从概念理解到实践应用的过程,其核心在于通过有效的学习路径掌握编程思维和技能。即时反馈机制是编程教学中的重要原理,它能显著降低学习挫败感,提升学习动力。从技术价值角度看,优秀的在线学习平台通过游戏化设计、社区互动和项目驱动,将抽象的编程概念转化为可感知的成就感。在应用场景上,无论是前端开发、数据分析还是算法训练,选择合适的学习资源都至关重要。本文结合即时反馈和颗粒化成就感等热词,探讨了如何筛选能真正点燃编程兴趣的在线平台,并提供了从互动学习到开源社区参与的实战路径,帮助学习者建立可持续的兴趣循环

weixin_34049948的博客 385

队列系统集成终极指南:Sidekiq、Resque、DelayedJob与Recommendable的完美配合

在构建现代Ruby应用时,智能推荐引擎Recommendable能够为你的用户提供个性化的内容推荐。然而,要实现高效实时的推荐更新,与队列系统的完美集成至关重要。本文将为你提供一份完整的队列系统集成指南,帮助你将Recommendable与Sidekiq、Resque和DelayedJob无缝对接,打造高性能的推荐系统。 ## 🚀 为什么需要队列系统集成? Recommendable的推荐引

gitblog_00100的博客 912

Express + pompelmi 文件上传扫描完整指南:快速集成 multer 的实用教程

pompelmi 是专为 Node.js 打造的 ClamAV 杀毒扫描工具,配合 Express 和 multer,你可以在文件落盘或入库之前用一次函数调用完成病毒扫描,零运行时依赖、判定结果带类型。本教程带你从零搭建一套完整的上传扫描流程:安装、接入 multer、处理三种扫描模式、拦截恶意文件。 ## 为什么文件上传要先过一遍杀毒扫描? 用户上传的文件是 Web 应用最常见的安全入口之一

gitblog_00059的博客 768

react ui 组件_使用React和Storybook构建UI组件

react ui 组件In the previous article, I gave an Introduction to Storybook and how it can be used to organize and build JavaScript components. Storybook is a UI library that can be used to document compo...

culiu9261的博客 778

Kotlin For React,router的使用

kotlin-react-router-dom kotlin-react-router-dom 是JetBrains官方为支持ReactRouter提供的包。实现单页面路由功能。 引入包 在build.gradle文件中添加如下代码: implementation("org.jetbrains:kotlin-react-router-dom:5.1.2-pre.113-kotlin-1.4.0") 使用 在kotlin中使用ReactRouter与React中没有什么不同,先看官方提供的代码示例: int

破小孩 448

React Native中使用Kotlin

github项目地址 写在前面 现希望用 kotlin 计算 a+b 的值返回,用 react-native 调用并显示结果 a+b在文件AlertManager.kt中 fun trigger(a:Double, b:Double, resPromise:Promise) react-native只能使用async & await接收结果,参见文件App.js 此外,java和kotlin同时存在并不影响,因此react-native生成的java文件不用动 步骤 1 初始化React

playerz的博客 4621

React.js 集成 Kotlin Spring Boot 开发 Web 应用实例详解

React.js 集成 Kotlin Spring Boot 开发 Web 应用实例详解项目工程目录~/easykotlin/reakt$ tree . ├── build │ ├── kotlin │ │ ├── compileKotlin │ │ └── compileTestKotlin │ └── kotlin-build │ └── version.

AI天才研究院 1万+

黑科技在此!移动开发者必须了解的跨平台开发工具

跨平台一直是老生常谈的话题,cordova、ionic、react-native、weex、kotlin-native、flutter等跨平台框架的百花齐放,颇有一股推倒原生开发者的势头。本文将对当下跨平台移动开发的现状、实现原理、框架的选择等进行深度解析。 为什么我们需要跨平台开发? 本质上,跨平台开发是为了增加代码复用,减少开发者对多个平台差异适配的工作量,降低开发成本,提高业务专注的同时,...

weixin_30594001的博客 851

Kotlin真的值得学习吗?

原文:出自我的公众号开发者技术前线 :Kotlin真的值得学习吗? 写在2017年11月 KotlinConf 大会宣布了 Kotlin 1.2 RC 版,并宣布 Kotlin/Native 已支持用于开发 iOS 应用和 Web 应用开发。 首届官方举办的 Kotlin 专题会议 KotlinConf 于5号在旧金山正式开幕,Kotlin 的首席语言设计师 Andrey Br...

Tamic (大白) 7197

用Kotlin Flutter制作一个Android应用并做出原生React

What is the point of creating an app with these powerful technologies? Even more power, the power of freedom, not limited by one framework. 用这些强大的技术创建应用程序有什么意义? 更大的权力,自由的权力不受一个框架的限制。 However, this is...

weixin_26727575的博客 708
上一篇: 当 Kotlin 爱上 React,会产生什么化学反应?
下一篇: 沉没的泰坦尼克号的幸存者数据分析
代码猎奇站
博客等级 码龄7年 39粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值