基于 react 的除了 Next.js原创内容,盗版必究。【原创内容,转载请注明出处】 其他的所谓框架我都只想说,鸡你太美!R原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】eact 实在太香了,但是实战开发起来却本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。又不怎么好弄。让我们来看最新的 road【本文首发于唐霜的博客】【版权所有,侵权必究】map:
未经授权,禁止复制转载。【访问 www.tangshuang.n【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。et 获取更多精彩内容】【本文首发于唐霜的博客】原创内容,盗版必究。
来自:react-developer-road本文版权归作者所有,未经授权不得转载。【本文受版权保护】map
著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.n原创内容,盗版必究。未经授权,禁止复制转载。et 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshu【版权所有,侵权必究】未经授权,禁止复制转载。ang.net我就想写个网页,何必这么残忍?面对这个画【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。面,我都有贴大哥表情包的冲动。但是我忍住转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】,毕竟我还是想写代码来丰富我的人生的。
原创内容,盗版必究。【版权所有】唐霜 www.tangshu【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。ang.net未经授权,禁止复制转载。在 react 的生态中,我们不难发现非【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。常优秀的项目。例如,跨组件的通信怎么办?本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。来 redux 吧!redux 组织好复【本文受版权保护】著作权归作者所有,禁止商业用途转载。杂?上 redux-saga 吧!异步咋【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。解决呢?来 redux-thunk 真香本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。!使用特定 state 也挺麻烦?搞 r【原创不易,请尊重版权】转载请注明出处:www.tangshuang.neteselect 如何!哎呀呀,还是来 r未经授权,禁止复制转载。【未经授权禁止转载】ematch 或来套国产的 dva 也行【本文首发于唐霜的博客】【原创不易,请尊重版权】……
【关注微信公众号:wwwtangshua【作者:唐霜】【作者:唐霜】ngnet】【原创内容,转载请注明出处】【未经授权禁止转载】【转载请注明来源】你让我写个应用,我除了要花精力去解决打包转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。编译工具的问题之外,还要来纠结到底要用哪【转载请注明来源】本文作者:唐霜,转载请注明出处。个方案。真的很烦唉!其实,就像当年用 j本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】query 用爽了,扛起 backbon本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】e 或更狠上 angular 就开干。我【本文首发于唐霜的博客】未经授权,禁止复制转载。写了这么多年 react,想要的是一套框【原创不易,请尊重版权】【作者:唐霜】架,拿过来就开撸的那种。
转载请注明出处:www.tangshua【本文受版权保护】本文作者:唐霜,转载请注明出处。ng.net【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。
从 roadmap 中,我们看这个区域,本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】也就是 react 生态的状态管理和表单【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】数据管理这个部分。是不是复杂!很复杂!那本文作者:唐霜,转载请注明出处。原创内容,盗版必究。是因为 MobX 还没有扩展开来聊。害得【关注微信公众号:wwwtangshuangnet】【转载请注明来源】我又想贴表包……
本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】我们能不能简化 react 应用中的状态【本文受版权保护】本文版权归作者所有,未经授权不得转载。管理?能不能把数据请求这块处理的更加优雅本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】?能不能提供更靠谱的 form 模型?有著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。的。
未经授权,禁止复制转载。【原创内容,转载请注明出处】未经授权,禁止复制转载。【访问 www.tangshuang.n【版权所有】唐霜 www.tangshuang.net【本文受版权保护】et 获取更多精彩内容】未经授权,禁止复制转载。【作者:唐霜】Nautil 框架来了!!!
著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】原创内容,盗版必究。【关注微信公众号:wwwtangshua原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。ngnet】
一款基于 react 的 js 前端框架【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。。在我看来,一个前端框架需要具备应用开发【本文受版权保护】未经授权,禁止复制转载。中必不可少的部件。而且要好用,方便开发者【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】理解和写代码。Nautil 一次性提供体本文版权归作者所有,未经授权不得转载。【作者:唐霜】验超爽,而且还有趣的:
原创内容,盗版必究。本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。- UI 渲染 【作者:唐霜】【版权所有】唐霜 www.tangshu本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。ang.net
- 路由 本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。【本文受版权保护】
- 状态管理 【本文首发于唐霜的博客】【原创不易,请尊重版权】【版权所有,侵权必究】
- 数据仓库 【原创内容,转载请注明出处】未经授权,禁止复制转载。【转载请注明来源】【访问 www.tangshuang.n【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】et 获取更多精彩内容】
- 数据类型检查 【转载请注明来源】【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】
- 跨端开发解决方案 著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。
- 多语言国际化 本文作者:唐霜,转载请注明出处。【转载请注明来源】【原创不易,请尊重版权】【本文受版权保护】
让我们来举个例子,就拿复杂的 state原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】 管理来开刀吧。想想你在以往经验里面使用本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。 redux 是怎么用的,有没有在准备方原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】案阶段就很纠结和心累?如果你用 Naut【转载请注明来源】【版权所有,侵权必究】il,不需要纠结,因为你没得选,只有一种本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】全局的状态管理方案。
【作者:唐霜】【关注微信公众号:wwwtangshua转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】ngnet】【作者:唐霜】import { Component, Store, ObservableProvider } from 'nautil'
import { Section, Text } from 'nautil/components'
// create a store
const store = new Store({
name: 'tomy',
age: 10,
})
class App extends Component {
render() {
return (
<ObservableProvider
name="$store" value={store}
subscribe={dispatch => store.watch('*', dispatch)} dispatch={this.update}
>
<Page1></Page1>
</ObservableProvider>
)
}
}
class Page1 extends Component {
static injectProviders = {
$store: true,
}
render() {
const { state } = this.$store
return <Section>
<Text>Hi, I am {state.name}, and I am {state.age} years old.</Text>
</Section>
}
}复制代码
啥?你没看到怎么管理状态的?不怪你,因为【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。它实在实在是太方便了,因为在 Nauti未经授权,禁止复制转载。【本文首发于唐霜的博客】l 里面,你可以没有全局的状态管理,但是【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】你一定会有某个数据是全局的(准确的说是跨本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。组件),你只需要用 Observable未经授权,禁止复制转载。【转载请注明来源】Provider 这个组件去提供就可以了【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net。然后在很深的组件里面去使用 injec原创内容,盗版必究。【原创内容,转载请注明出处】tProviders 来注入这个被提供的未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】数据。恰巧的是,Nautil 提供的 S【原创内容,转载请注明出处】【原创内容,转载请注明出处】tore 是一个可被观察的数据容器,使用【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。 store.watch 来监听它的数据著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】的变化,并在变化的时候触发更新操作。
【版权所有】唐霜 www.tangshu【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】ang.net【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.n【未经授权禁止转载】转载请注明出处:www.tangshuang.netet 获取更多精彩内容】还没明白?
【转载请注明来源】【作者:唐霜】【本文受版权保护】未经授权,禁止复制转载。这里的 store 就是你的状态管理器了原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。啊!!!store 里面存着整个应用被共未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net享的 state,你可以在任何地方去,任【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。何地方改,任何地方删,都会通过 stor著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.nete.watch 的部分触发应用更新。也许著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net你没听明白我的意思。我的意思是,你甚至可本文作者:唐霜,转载请注明出处。原创内容,盗版必究。以在 react 应用之外去修改数据都是原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。可以的,只要你在任何地方执行一下:
【关注微信公众号:wwwtangshua【本文首发于唐霜的博客】【未经授权禁止转载】ngnet】【原创不易,请尊重版权】【版权所有】唐霜 www.tangshu著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.netang.net【原创不易,请尊重版权】store.state.age ++复制代码
你的界面就会发生变化。是的,即使把你的 未经授权,禁止复制转载。转载请注明出处:www.tangshuang.netnautil 应用和 angular 应未经授权,禁止复制转载。原创内容,盗版必究。用混在一起,共享一个 store,也是可未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net以的。同时,你还可以通过 watch 来【作者:唐霜】【原创内容,转载请注明出处】收集每一次数据的变化,在必要时,把收集起本文作者:唐霜,转载请注明出处。【转载请注明来源】来的数据通过 store.update 【转载请注明来源】原创内容,盗版必究。来复原数据。
【关注微信公众号:wwwtangshua【本文首发于唐霜的博客】未经授权,禁止复制转载。ngnet】原创内容,盗版必究。它是不是完全超出了你对 react 状态原创内容,盗版必究。【本文受版权保护】管理的理解?没关系,还有一个东西会超出你未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。的理解,那就是从后台 api 拉取数据。
转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。【作者:唐霜】ng.net【版权所有,侵权必究】【访问 www.tangshuang.n【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。et 获取更多精彩内容】你有没有想过,为什么那么优秀的 redu【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。x 会变得那么臃肿?因为数据是前端应用的转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】命啊,一个不需要从后台 api 取数据的未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net前端应用,除非是工具或游戏,否则就是没有未经授权,禁止复制转载。【未经授权禁止转载】灵魂的应用啊!所以,redux 出来之后【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。,包括 react 本身,都必须面临异步转载请注明出处:www.tangshuang.net【版权所有,侵权必究】数据请求的问题。以 react 本身而言【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net,它一开始完全没有机制去处理,一个数据必【本文首发于唐霜的博客】【本文受版权保护】然存在两种状态:数据还没有从后台拉回来的未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net状态,已经拉回来的状态。在数据没有拉回来本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net的时候,把界面显示出来,等数据回来了,再【本文首发于唐霜的博客】【转载请注明来源】闪一下,哦豁,用户都可以化身产品经理给开【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】发提 bug 了。
【转载请注明来源】【本文首发于唐霜的博客】Nautil 怎么解决?
本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。原创内容,盗版必究。import { Component, ObservableProvider, Depository, Prepare } from 'nautil'
import { Text } from 'nautil/components'
// set data sources information
const datasources = [
{
id: 'articles',
url: '/api/articles',
},
{
id: 'tag',
url: '/api/tags/{tag}',
},
]
// create a data depository
const depo = new Depository({
expire: 10000,
})
// register data sources into depository
depo.register(datasources)
class App extends Component {
render() {
return (
<ObservableProvider
name="$depo" value={depo}
subscribe={dispatch => depo.subscribe('articles', dispatch).subscribe('tag', dispatch)}
dispatch={this.update}
>
<Page1></Page1>
</ObservableProvider>
)
}
}
class Page1 extends Component {
static injectProviders = {
$depo: true,
}
render() {
const depo = this.$depo
const some = depo.get('tag', { tag: 'some name' })
return (
<Prepare isReady={some} loadingComponent={<Text>loading...</Text>}>
<Text>{some.name}</Text>
</Prepare>
)
}
}复制代码
创建一个数据仓库来管理从后台 api 接【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。口拉取的数据。在业务代码和后台 api 【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。之间,不要直接打交道,而是通过数据仓库整著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。合。业务代码,只需要从仓库中 get 数转载请注明出处:www.tangshuang.net原创内容,盗版必究。据即可,这个 get 是同步操作,不需要【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。等待。同时,仓库是可观察的,通过一个 s转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.netubscribe 方法对仓库进行观察,如【未经授权禁止转载】转载请注明出处:www.tangshuang.net果发现对应的数据发生变化,那么立即更新界【访问 www.tangshuang.net 获取更多精彩内容】【访问 www.tangshuang.net 获取更多精彩内容】面。对于仓库中还没有对应的数据时,使用 【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】Prepare 组件来提供一个 load【本文首发于唐霜的博客】【本文首发于唐霜的博客】ing 效果。
【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。听上去好像还挺顺的对不对?但是,等等!!【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】!我什么时候发 ajax 去请求数据?
【未经授权禁止转载】【本文受版权保护】你真的不需要关心 ajax 的问题,真的【本文首发于唐霜的博客】【原创内容,转载请注明出处】!你只要 get, get, get~ 【作者:唐霜】原创内容,盗版必究。我能理解你理解不了,只是现在。只要你用用著作权归作者所有,禁止商业用途转载。【作者:唐霜】,什么 thunk, saga, act【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。ion, dispatch 统统一边去耍转载请注明出处:www.tangshuang.net【未经授权禁止转载】吧。不需要异步的好吗。
【关注微信公众号:wwwtangshua本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。ngnet】【关注微信公众号:wwwtangshua【本文首发于唐霜的博客】【转载请注明来源】ngnet】转载请注明出处:www.tangshua未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】ng.net话说回来,即使有异步操作,我们还有 st原创内容,盗版必究。【本文受版权保护】ore,随时随地,时时刻刻,想改就改,毫【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。无限制。
转载请注明出处:www.tangshua【转载请注明来源】本文版权归作者所有,未经授权不得转载。ng.net【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。如果你再去了解一下 Nautil 的路由【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。,你会发现一个规律:
【本文首发于唐霜的博客】【转载请注明来源】【版权所有,侵权必究】【原创不易,请尊重版权】未经授权,禁止复制转载。Nautil 就是 react,naut著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netil 不只是 react。
【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshu未经授权,禁止复制转载。转载请注明出处:www.tangshuang.netang.net
说的这么玄乎,意思是,它完全兼容 rea【本文首发于唐霜的博客】【本文受版权保护】ct 应用。比如你在其他地方写了一些纯 本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。UI 的 react 组件,没关系,拿过著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】来直接用。或者你想在其他的 react 【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。应用中使用 nautil 编写的组件,没著作权归作者所有,禁止商业用途转载。【转载请注明来源】关系,直接拿去用。
【关注微信公众号:wwwtangshua【本文首发于唐霜的博客】【未经授权禁止转载】ngnet】原创内容,盗版必究。你会发现,nautil 中强调“可观察的原创内容,盗版必究。【本文首发于唐霜的博客】”这样一个概念。简单说就是有一个办法知道【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】发生了变化。nautil 内置的 Obs【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】erver 组件用于监听这些变化,并且在本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】变化发生时执行传入的逻辑(一般是更新界面著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。)。所以,在 nautil 中,数据、状【原创内容,转载请注明出处】未经授权,禁止复制转载。态、路由都是“可观察的”对象,被注入到应【关注微信公众号:wwwtangshuangnet】【原创内容,转载请注明出处】用中。但本质上,它们是完全独立的,意思是【转载请注明来源】转载请注明出处:www.tangshuang.net,你可以在 react 应用之外的任何场本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。景使用这些“可观察的”对象,也可以将整个本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。体系之外的“可观察的”对象拿到 naut【作者:唐霜】【版权所有,侵权必究】il 中直接使用。这也可以说是“渐进式”【版权所有,侵权必究】【访问 www.tangshuang.net 获取更多精彩内容】,可用可不用,当然,作为框架,你必须这样本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】用才符合我写 nautil 的初衷。
著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshua原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。ng.net【作者:唐霜】【作者:唐霜】原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。不开源的都是耍流氓。
未经授权,禁止复制转载。【访问 www.tangshuang.n著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。et 获取更多精彩内容】【访问 www.tangshuang.n【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】et 获取更多精彩内容】
很遗憾,Nautil 到现在还没有发布。【关注微信公众号:wwwtangshuangnet】【作者:唐霜】但你可以通过 github 关注或贡献代转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net码。你也可以从 github 克隆下来跑【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net跑看,也许会喜欢上呢~
【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshu【作者:唐霜】【版权所有】唐霜 www.tangshuang.netang.net未经授权,禁止复制转载。 转载请注明出处:www.tangshua【转载请注明来源】【本文首发于唐霜的博客】ng.net原创内容,盗版必究。本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。最后补充一句。Nautil 还提供了内置转载请注明出处:www.tangshuang.net原创内容,盗版必究。的 Model,拥有结构化、数据校验、格【原创内容,转载请注明出处】【本文受版权保护】式化、类型检查、可观察等特性,在表单开发【作者:唐霜】未经授权,禁止复制转载。时可能是你正在寻找的最好的解决方案,之一【作者:唐霜】【版权所有】唐霜 www.tangshuang.net。
【作者:唐霜】【原创内容,转载请注明出处】作者:否子戈
【作者:唐霜】
链接:https://juejin.i转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。m/post/5d20ce44f265d【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】a1ba328e6f7
转载请注明出处:www.tangshua原创内容,盗版必究。【作者:唐霜】ng.net
来源:掘金
本文作者:唐霜,转载请注明出处。
著作权归作者所有。商业转载请联系作者获【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。得授权,非商业转载请注明出处。

