AI 是否能完全替代码农的 1 点思考
2025-03-22 01:51:00
在最近使用 Copilot 和 Cursor 进行 Coding 的时候,偶尔会考虑现在的 AI 对于开发者到底意味着什么,我感觉其实 AI 带来的最大价值不是彻底取代开发人员,而是大幅提升了领域专家...
AI 生成 UI 设计的 Cursor 实践
2025-03-05 03:31:00
最近在探索 AI Coding in Front-End 的时候看到一篇较为🐂🍺的文章《一个提示词 claude 生成一个 app 的 ui/ux》(UC 震惊部提前预定作者入职)。虽然标题比较震惊,...
论如何打击 LLMs 过度的自信心爆棚,让其产生的内容更准确、真实
2025-02-22 02:03:00
本文为未经 AI 润色的原文如我之前的某次分享,我一直感觉 LLMs 们喜欢胡说八道满嘴放炮,平常大家都说这是「LLMs 的幻觉情况」,但我还是恶意的称呼为它们喜欢胡说八道。在《Does Fine-T...
关于 DeepSeek NSA 论文的一点思考
2025-02-19 01:09:00
今天看到 DeepSeek 团队前几日发布的论文《Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Att...
Claude 4:混合型大模型的崭新思路与未来潜力
2025-02-15 02:21:00
今天在 Twitter(求马王爷还我 Twitter 原名!!)看到一个消息,来自一个推文大致提到:「Claude 4 in the coming weeks」,具体内容可以参考这条推文。重点是:Cl...
Deep Research:开源替代方案与未来发展潜力
2025-02-14 01:17:00
最近大家都在谈论 CloseAI 的 Deep Research 模式,称其研究效果非常强大,但面对高达 200???? 的价格,不少人却感到难以承受。幸运的是,开源社区也有不少项目尝试复现类似的效果...
观 OpenAI 广告有 1 点感
2025-02-12 03:19:00
本文为未经 AI 润色的原文今天看了 OpenAI 的广告,一开始只是觉得这个创意很有意思。视频采用了黑白点画风格,从一个小小的圆点开始,随着画面展开,逐渐呈现出越来越复杂的图像,展现了人类历史上各个...
关于 DeepSeek-R1 与 CoT 模型的提示词策略一点记录
2025-02-11 02:23:00
今天在公司和同事们开会,讨论到了 CoT(Chain of Thought)模型 和 通用模型 在提示词策略方面的差异,尤其是与 DeepSeek-R1 的训练过程有关的内容。此话题让我想起了之前阅读...
DeepSeek V3 与 AI 训练新思路:低成本硬件与技术突破
2025-02-09 01:29:00
今天在站会上和同事讨论了从一个 AI 应用团队(即 AI 的使用者)向 AI 全链路团队(即从模型训练到应用全程都参与)转型的可能性。这让我联想到了最近看到的一篇关于 DeepSeek V3 技术的访...
关于「AI 创始人的惨痛教训」系列文章的 1 点感想
2025-02-01 01:36:00
本文为未经 AI 润色的原文我个人一直不相信当前生成式 AI 的能力,认为 AI 总是会胡说八道。年前有一天中午和 Ricky 在食堂,达哥也在边上,我提到如何建立对 AI 在严肃工作领域的信任感。我...
关于「人工智能」分类下文章的说明
2025-02-01 00:43:00
在「人工智能」分类下,发布的所有文章其实来源于我工作中的一些学习笔记。为了将这些笔记更清晰、更易读地呈现给大家,我选择了使用 AI 对内容进行调整和润色。通过这种方式,文章的表达更为流畅,信息传达也更...
对 v2c 进行了一次前端的重构
2024-09-17 20:24:00
0x0自从 2019 年把博客迁移到 Typecho,再到 2020 年用 React 自己写了博客的前端进行了前后端分离后,我的博客前端就几乎没怎么动过了。期间其实也多次想开始重构,但总是因为工作忙...
如何让 uTools 通过代理服务器连接网络
2024-06-18 14:35:00
总的来说就是为 uTools 添加启动参数 --proxy-server 即可通过代理访问网络。备注:此方法只能代理掉 chromium 侧的流量,无法覆盖 uTools 本身非渲染进程的流量、插件 ...
关于这三年:我也是当过美食博主了
2024-05-26 22:15:00
是的,I am back!很久没有更新博客了,一方面是忙于工作无心更新(这是个借口),另一方面是自从 2021 年 8 月发生了丢失数据的问题,导致很多历史文章都消失在互联网长河中。虽然尽了很大的努力...
关于
FydeOS AI LogoFydeOS LogoAI
是如何诞生的
2023-12-06 22:01:00
0x0 为什么要做这个项目 FydeOS Logo AI 项目的初衷是为了让用户可以更加自然地控制操作系统,能够使用自然语言与系统进行交互。例如,通过语音或文本与系统对话,控制软件、查找信息,甚至快速解答工...
[家宴 · 2021]也许是今年最认真的一顿饭,红红火火锅
2021-12-31 23:33:00
在 2020 年,我曾经搞过几次家宴,邀请了一众好友来家里吃吃喝喝。甚至在 V 站加了不少好友,对他们说『下次家宴有空来家里一起吃』,但是事实上因为种种原因,2021 年非但没有邀请 V 友来家里吃饭...
【一场灾难】多站点数据丢失说明
2021-08-23 21:47:16
大概在一个多月前,包括 我的博客、LoveLive.tools(渣男:说话的艺术)、Mr.Task 等网站突然无法访问,服务器无法连接。本来以为只是服务提供商突发故障(之前也出现过,后来都正常恢复),...
[LoveTime] 一个与爱情和时间线相关的项目
2021-03-20 11:11:00
0x0 为什么做这个项目大概在一年前,我注册了 lovetime.tools 的域名。说来也是奇怪,我总是喜欢在脑子里冒出一个想法之后立刻注册相关的域名,但是往往实际完成上线的时间都会拖很久。比如 渣...
有目的 (di) 地 (de) 瞎折腾 —— 为了温暖的被窝而实现远程开机
2021-01-09 13:14:00
0x0这个冬天真的太 TM 的冷了,冷到我想一天 24 小时都呆在床上哪儿也不去。本来在这个美好的周六是可以实现这个同样美好的愿望,但是一大早同事来的电话击碎了我的梦想 —— 线上项目出了点问题需要排...
[家宴・2020] 入冬的第一次聚会,是带些许火辣的味道
2020-11-18 20:00:00
0x0是入冬的日子了,终于送走了盘踞在头上小两三个月的秋老虎。说来也是奇怪,在我记忆中大概七八年前,大概还是我上初中的时候,总是能精准的掐着日子算到什么时候要入冬了,左右不过是国庆过后五六天就可以翻出...
下一篇
弹出
关闭

试过了原生小程序我选择 Taro

这次令人愉快的公(移)费(动)出(办)游(公)快接近了尾声。委实说整个移动办公的过程中我们开发部门是没有什么产出的,都在体验武夷山的好风光了,晚上回来之后象征性的打个外勤卡就开始打游戏的打游戏睡觉的睡觉(……)。但是产品和策划的同事还是尽职尽责的对接下来的产品路线做出了规划,顺便来找我聊了聊天。

具体聊的内容就略过不表了,大概就是我们未来的产品要从原生的 App 走向 小程序 + App 的路线,所以就需要我们定下来关于小程序开发的一系列技术栈问题。

很久之前在小程序刚刚面世的时候接触过小程序的文档,因为当时对前端的接触还不算多,所以没有很认真的去实践过从 0 开始构建一个小程序。这次拿到小程序的开发任务之后,我去看了一下小程序原生的语法和 IDE 之类的,着实是感觉到有些蛋疼的:的确是有太多的限制和兼容性问题,部分 CSS 3 的语法不能很好的兼容,第三方库引入不算方便,蹩脚的事件处理等等。让我感觉一夜回到了 IE 6 时代的开发。

不过我依稀记起来了之前在哪里看过京东 Aotu 团队发布的 Taro 框架,可以方便的用 React 的语法去写小程序。不过当时还处于很早起的测试阶段。

仔细去了解了一下 Taro 框架目前的成果,还是很棒的。已经有很多线上的小程序使用 Taro 框架,Taro 开发团队的代码迭代和 Bug 修复还是很积极的,产品社区也不错,很多用户在为 Taro 的开发做贡献。我感觉就是你了——Taro!

Taro 对我来说最大的几个优点是:

  • React 语法,毕竟自从接触了 React 之后我就再也回不去 jQuery 的石器时代了。
  • 多端支持,截至目前 Taro 可以达到一次编码后编译成 微信小程序、H5、React Native、支付宝小程序 的原生代码。这样未来想从微信小程序发展到其他平台的小程序抑或是原生 App 时就不会有太大的困难。
  • 双向转换,可以实现 Taro 和 微信原生小程序 的互相转换,这样一些小程序独有的第三方组件或模块也能方便的引入到项目中。

当然,目前还是有一些限制的地方:

  • 不能在包含 JSX 元素的 map 循环中使用 if 表达式。
  • 不能使用除 Array.map 之外的方法操作JSX数组。
  • 不能在 JSX 参数中使用匿名函数。
  • 不能使用无状态组件。

不过这些限制都是有相应的规避办法的,并且 Taro 未来的开发中应该也会慢慢的消除这些限制。至少目前来看,Taro 在我们的项目中是可以完美使用的。

接下来要开始实践一下 Taro 的应用。首先规划下来的技术栈是:TypeScript + Taro + Dva,引入 TypeScript 的目的是在项目开发中尽可能地规避一些错误和规范开发,而使用 Dva 进行状态管理完全是在 Web 端的项目中用习惯了 Dva,Taro 官方推荐的状态管理是 Redux 和 MobX,有兴趣的可以自行去了解一下相关文档。

在项目中引入 Dva:

  • 安装需要的包,我们只需要安装 dva-coredva-loading 两个包即可。再安装 redux-logger
  • 写一个 Dva 的帮助类在项目中引用:
import Taro from '@tarojs/taro';
import { create } from 'dva-core';
import { createLogger } from 'redux-logger';
import createLoading from 'dva-loading';

let app;
let store;
let dispatch;

function createApp(opt) {
  opt.onAction = [createLogger()];
  app = create(opt);
  app.use(createLoading({}));

  if (Taro.getEnv() === Taro.ENV_TYPE.ALIPAY) {
    global = {};
  }

  if (!global.registered) opt.models.forEach(model => app.model(model));
  global.registered = true;
  app.start();

  store = app._store;
  app.getStore = () => store;

  dispatch = store.dispatch;

  app.dispatch = dispatch;
  return app;
}

export default {
  createApp,
  getDispatch() {
    return app.dispatch;
  }
}
  • 在 Taro 的入口文件(我这里是 App.tsx)中引入 Provider 和 Dva 帮助类:
import { Provider } from '@tarojs/redux';
import dva from './Utils/Dva';  // 刚才写的帮助类

创建一个 Dva 和 Dva Store 的实例:

const dvaApp = dva.createApp({
  initialState: {},
  models: models,
});

const store = dvaApp.getStore();

然后将根组件用 Provider 包裹起来并传入 Dva Store:

<Provider store={store}>
    <Index />
</Provider>
  • 最后写一个示例页面来试一下效果(和 Web 端一样写法,再此略过)。

实际开发过程中遇到的坑:

  • 微信开发者工具有时候会提醒 找不到 dva-core 或者其他什么乱七八糟的包:

    • 这个问题我感觉是 微信开发者工具 的一个 Bug,实际上只要关掉微信开发者工具再重新打开就好了……保险一点的话可以重新编译一遍 Taro 的代码。并且强烈建议打开项目时先编译完代码后再打开微信开发者工具。

最后附上我做的示例项目,可以开箱即用开发 Taro 项目:

TaroDva.Demo

其中有详细的项目介绍和编码规范可以供参考。