Table des matières
回复内容:
Maison interface Web Tutoriel H5 比较redux和reflux以及自己写个TinyFlux?

比较redux和reflux以及自己写个TinyFlux?

Jun 07, 2016 am 08:44 AM
redux store view

看了redux和reflux,感觉redux好复杂啊,看reflux,1个小时就能弄懂,可是看redux,1天下来都迷迷糊糊的。

感觉flux不就应该是view层发消息给store,store根据消息去修改数据,修改完数据后通知涉及到被修改的view组建刷新state吗。。。

然后我看着reflux的使用方式(它的源代码没怎么看,感觉还是多了),自己写了个tinyFlux。。。二楼附上。。各位看看。。。。可能还太幼稚了。。。欢迎批评啊。。。

回复内容:

谢邀,Flux 相关的轮子已经太多了,实在看不过来,抱歉。

简单说说 Reflux 和 Redux 的区别吧。

之前我在 如何理解 Facebook 的 flux 应用架构? - 知乎用户的回答 里提到过,目前市面上很多 Flux 相关的框架就是把 Dispatcher 隐藏了,然后封装了 Action Creator 和 Component 绑定的细节,简单地说就是「简化 Flux 里冗余的代码和操作」。

Reflux 在实现上面说到的内容的基础上,又提供了很多开发者喜欢的功能,比如 View 监听 Action 这种违背 Flux 概念但是确实在实际应用中很方便的特性。

而 Redux 并不仅仅是「简化 Flux」,它重新定义了 Flux 中每一个角色的功能、职责及实现方式。其中最大的不同是没有 Store 的概念(或者说 Store 不再需要用户去定义),而增加了 Reducer 的概念。Store 会通过我们定义的 Reducer 自动生成,使用 redux.createStore 方法。此外,Redux 定义了一个 middleware 机制,可以让我们在 Action 中更方便的处理业务逻辑。

总结一下就是,如果你觉得目前 Flux 用着不爽太多冗余代码, 那么你写的 TinyFlux 很不错,解决了你的很多问题;然而如果你想拥有更多 redux 带来的新特性,或者说你喜欢并推崇不可变的数据结构,或者说你想显得逼格比较高,那么看懂并会用 redux 绝对是你的不二选择。

PS. redux 确实不错,我们已经开始着手在生产环境中使用了。 Redux 核心概念 深入浅出Redux w3ctech.com/topic/1561
<span class="c1">//TinyFlux.js</span>
<span class="kd">function</span> <span class="nx">createStore</span> <span class="p">(</span><span class="nx">store</span><span class="p">,</span> <span class="p">...</span><span class="nx">args</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">store</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'请定义store'</span><span class="p">);</span>
  <span class="p">};</span>
  <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">store</span><span class="p">.</span><span class="nx">init</span> <span class="o">===</span> <span class="s1">'function'</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">store</span><span class="p">.</span><span class="nx">init</span><span class="p">(</span><span class="nx">args</span><span class="p">);</span>
  <span class="p">};</span>
  <span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">store</span><span class="p">.</span><span class="nx">actions</span> <span class="o">!==</span> <span class="s1">'function'</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'actions应该是一个返回一个对象的function,对象里的方法都要用箭头表达式来书写,利用箭头表达式的this绑定。'</span><span class="p">);</span>
  <span class="p">};</span>
  <span class="nx">store</span><span class="p">.</span><span class="nx">actions</span> <span class="o">=</span> <span class="nx">store</span><span class="p">.</span><span class="nx">actions</span><span class="p">();</span>
  <span class="k">if</span> <span class="p">(</span><span class="nx">store</span><span class="p">.</span><span class="nx">subscriber</span> <span class="o">||</span> <span class="nx">store</span><span class="p">.</span><span class="nx">emit</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'不该存在subscriber和emit'</span><span class="p">);</span>
  <span class="p">};</span>
  <span class="nx">store</span><span class="p">.</span><span class="nx">subscriber</span> <span class="o">=</span> <span class="p">[];</span>
  <span class="nx">store</span><span class="p">.</span><span class="nx">emit</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argument</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">store</span><span class="p">.</span><span class="nx">subscriber</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="nx">component</span> <span class="o">=></span> <span class="nx">component</span><span class="p">.</span><span class="nx">reload</span><span class="p">());</span>
  <span class="p">};</span>
  <span class="k">return</span> <span class="nx">store</span><span class="p">;</span>
<span class="p">}</span>

<span class="kd">function</span> <span class="nx">connect</span> <span class="p">(</span><span class="nx">store</span><span class="p">,</span> <span class="nx">def</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">return</span> <span class="p">{</span>
      <span class="nx">getInitialState</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span>
        <span class="kd">var</span> <span class="nx">state</span> <span class="o">=</span> <span class="p">{};</span>
        <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">def</span><span class="p">)</span> <span class="p">{</span>
          <span class="k">try</span><span class="p">{</span>
            <span class="nx">state</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="s1">'store.'</span><span class="o">+</span><span class="nx">def</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span>
          <span class="p">}</span> <span class="k">catch</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
            <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span>
          <span class="p">}</span>
        <span class="p">};</span>
        <span class="k">return</span> <span class="nx">state</span><span class="p">;</span>
      <span class="p">},</span>
      <span class="nx">reload</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
        <span class="kd">var</span> <span class="nx">state</span> <span class="o">=</span> <span class="p">{};</span>
        <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">def</span><span class="p">)</span> <span class="p">{</span>
          <span class="k">try</span><span class="p">{</span>
            <span class="nx">state</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="s1">'store.'</span><span class="o">+</span><span class="nx">def</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span>
          <span class="p">}</span> <span class="k">catch</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
            <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span>
          <span class="p">}</span>
        <span class="p">};</span>
        <span class="k">this</span><span class="p">.</span><span class="nx">setState</span><span class="p">(</span><span class="nx">state</span><span class="p">);</span>
      <span class="p">},</span>
      <span class="nx">componentDidMount</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span>
        <span class="nx">store</span><span class="p">.</span><span class="nx">subscriber</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="k">this</span><span class="p">);</span>
      <span class="p">},</span>
      <span class="nx">componentWillUnmount</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
        <span class="nx">store</span><span class="p">.</span><span class="nx">subscriber</span><span class="p">.</span><span class="nx">splice</span><span class="p">(</span><span class="nx">store</span><span class="p">.</span><span class="nx">subscriber</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="k">this</span><span class="p">),</span><span class="mi">1</span><span class="p">);</span>
      <span class="p">}</span>
  <span class="p">};</span>
<span class="p">}</span>

<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
  <span class="nx">createStore</span><span class="o">:</span> <span class="nx">createStore</span><span class="p">,</span>
  <span class="nx">connect</span><span class="o">:</span> <span class="nx">connect</span>
<span class="p">}</span>
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Développement Laravel : Comment générer des vues avec Laravel View ? Développement Laravel : Comment générer des vues avec Laravel View ? Jun 14, 2023 pm 03:28 PM

Laravel est actuellement l'un des frameworks PHP les plus populaires et ses puissantes capacités de génération de vues sont impressionnantes. Une vue est une page ou un élément visuel affiché à l'utilisateur dans une application Web, qui contient du code tel que HTML, CSS et JavaScript. LaravelView permet aux développeurs d'utiliser un langage de modèle structuré pour créer des pages Web et générer les vues correspondantes via les contrôleurs et le routage. Dans cet article, nous explorerons comment générer des vues à l'aide de LaravelView. 1. Quoi

Le Microsoft Store ne peut pas être ouvert et affiche « Désolé ! Un problème s'est produit, mais nous avons bien compris » - [Solution détaillée] Le Microsoft Store ne peut pas être ouvert et affiche « Désolé ! Un problème s'est produit, mais nous avons bien compris » - [Solution détaillée] Mar 27, 2024 pm 01:21 PM

Certains utilisateurs souhaitent trouver leurs applications préférées dans le Microsoft Store, les télécharger et les installer, mais constatent que le Microsoft Store ne peut pas être ouvert et qu'il affiche également le message "Désolé ! Quelque chose s'est mal passé, mais nous l'avons bien fait." le résoudre pour qu'il puisse être ouvert ? Le Microsoft Store est-il de nouveau opérationnel ? L'éditeur a compilé deux méthodes ci-dessous, j'espère qu'elles pourront vous aider ! La première méthode peut appuyer sur Win+R→enter cmd, puis maintenir la touche Ctrl+shift→cliquer sur OK (cliquez sur Oui après l'apparition de l'UAC), puis la fenêtre cmd apparaît (mode administrateur), puis copiez et collez le contenu suivant : netshwinsockresetnetshintipresetipconfig/ releaseipconfig/renewi

Tutoriel React Redux : Comment utiliser Redux pour gérer l'état du front-end Tutoriel React Redux : Comment utiliser Redux pour gérer l'état du front-end Sep 26, 2023 am 11:33 AM

Tutoriel ReactRedux : Comment gérer l'état du front-end avec Redux React est une bibliothèque JavaScript très populaire pour créer des interfaces utilisateur. Et Redux est une bibliothèque JavaScript permettant de gérer l'état des applications. Ensemble, ils nous aident à mieux gérer l’état du front-end. Cet article expliquera comment utiliser Redux pour gérer l'état dans les applications React et fournira des exemples de code spécifiques. 1. Installer et configurer Redux Tout d'abord, nous devons installer Re

Meilleures pratiques pour créer des applications Web évolutives à l'aide de Go et Redux Meilleures pratiques pour créer des applications Web évolutives à l'aide de Go et Redux Jun 18, 2023 pm 01:59 PM

À mesure que les applications Web continuent de se développer, de plus en plus d'entreprises commencent à passer du rendu back-end traditionnel au rendu front-end. Afin d'atteindre cet objectif, de nombreuses entreprises adoptent le langage Go et Redux dans leurs applications Web. Dans cet article, nous discuterons des meilleures pratiques pour créer des applications Web évolutives à l'aide de ces deux technologies. Familier avec le langage Go Le langage Go est un langage de programmation open source développé par Google. Il est simple, efficace et sûr, et peut être utilisé pour créer des applications Web hautement concurrentes. Construit en utilisant le langage Go

Un article expliquant les détails de l'utilisation des Redux Hooks Un article expliquant les détails de l'utilisation des Redux Hooks Nov 11, 2022 pm 06:24 PM

Cet article parlera des détails de l'utilisation de Redux Hooks. J'espère qu'il vous sera utile !

Comment résoudre le problème de valeur réactive du magasin vue3 vuex4 Comment résoudre le problème de valeur réactive du magasin vue3 vuex4 May 29, 2023 pm 06:55 PM

Scénario : Lorsqu'on clique sur un bouton sur la page, la quantité augmente et la valeur est stockée dans le magasin. Lorsque l'on clique sur le bouton, la valeur ne change pas. import{useStore}from'@/vuex';conststore=useStore()constonSubmit=()=>{store.dispatch("incrementAction",1);}letcount=store.state.count{{count}}Raison : stocker .state.count est une méthode de valeur incorrecte. Bien qu'elle puisse être supprimée, la réponse est perdue.

Comment utiliser la réflexion et le proxy dynamique pour implémenter une bibliothèque de liaison d'annotations View en Java Comment utiliser la réflexion et le proxy dynamique pour implémenter une bibliothèque de liaison d'annotations View en Java Apr 30, 2023 pm 05:34 PM

Utilisez la réflexion combinée à un proxy dynamique pour implémenter une bibliothèque de liaison d'annotations View qui prend en charge la liaison de vues et d'événements. Le code est concis, facile à utiliser et présente une forte évolutivité. Fonctions prises en charge @ContentView lie la mise en page au lieu de setContentView() @BindView lie View au lieu de findViewById() @OnClick lie l'événement de clic au lieu de setOnClickListener() @OnLongClick lie l'événement d'appui long au lieu de setOnLongClickListener() Classe d'annotation de code @Target(ElementType. TYPE )@Rétention(Rete

Comment utiliser React et Redux pour mettre en œuvre une gestion de données frontale complexe Comment utiliser React et Redux pour mettre en œuvre une gestion de données frontale complexe Sep 26, 2023 am 09:30 AM

Comment utiliser React et Redux pour mettre en œuvre une gestion complexe des données frontales Préface : Avec le développement continu de la technologie front-end, les applications frontales deviennent de plus en plus complexes et la gestion des données est devenue de plus en plus importante. React et Redux sont actuellement des frameworks front-end populaires et ils peuvent nous aider efficacement à gérer et à mettre à jour les données. Cet article expliquera comment utiliser React et Redux pour implémenter une gestion complexe des données frontales et fournira des exemples de code spécifiques. 1. Introduction à React React est un JavaScript utilisé pour créer des interfaces utilisateur

See all articles