比较redux和reflux以及自己写个TinyFlux?
看了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 http://www.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>

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Laravel은 현재 가장 인기 있는 PHP 프레임워크 중 하나이며 강력한 뷰 생성 기능이 인상적입니다. 보기는 웹 애플리케이션에서 사용자에게 표시되는 페이지 또는 시각적 요소로, HTML, CSS, JavaScript와 같은 코드가 포함되어 있습니다. LaravelView를 사용하면 개발자는 구조화된 템플릿 언어를 사용하여 웹 페이지를 구축하고 컨트롤러 및 라우팅을 통해 해당 뷰를 생성할 수 있습니다. 이번 글에서는 LaravelView를 사용하여 뷰를 생성하는 방법을 살펴보겠습니다. 1. 무엇
![Microsoft Store가 열리지 않고 '죄송합니다. 문제가 발생했습니다. 문제가 해결되었습니다.'라는 메시지가 표시됩니다. - [자세한 해결 방법]](https://img.php.cn/upload/article/000/887/227/171151687965989.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
일부 사용자는 Microsoft Store에서 자신이 좋아하는 앱을 찾아 다운로드하고 설치하려고 하지만 Microsoft Store가 열리지 않고 "죄송합니다. 문제가 발생했지만 제대로 처리했습니다."라는 메시지가 표시됩니다. 열 수 있도록 해결하세요. Microsoft Store가 다시 작동되고 있나요? 편집자는 아래 두 가지 방법을 정리했습니다. 도움이 되기를 바랍니다! 방법 1은 Win+R을 누르고 → cmd를 입력한 다음 Ctrl+Shift를 누른 상태에서 → 확인을 클릭(UAC가 팝업된 후 예를 클릭)하면 cmd 창이 팝업되고(관리자 모드) 다음 내용을 복사하여 붙여 넣을 수 있습니다. netshwinsockresetnetshintipresetipconfig/ releaseipconfig/renewi

ReactRedux 튜토리얼: Redux를 사용하여 프런트엔드 상태를 관리하는 방법 React는 사용자 인터페이스 구축을 위한 매우 인기 있는 JavaScript 라이브러리입니다. 그리고 Redux는 애플리케이션 상태를 관리하기 위한 JavaScript 라이브러리입니다. 함께 사용하면 프런트엔드 상태를 더 잘 관리할 수 있습니다. 이 글에서는 Redux를 사용하여 React 애플리케이션에서 상태를 관리하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. Redux 설치 및 설정 먼저 Re를 설치해야 합니다.

웹 애플리케이션이 계속 발전함에 따라 점점 더 많은 회사가 기존 백엔드 렌더링에서 프런트엔드 렌더링으로 전환하기 시작했습니다. 이러한 목표를 달성하기 위해 많은 기업에서는 웹 애플리케이션에 Go 언어와 Redux를 채택하고 있습니다. 이 기사에서는 이 두 가지 기술을 사용하여 확장 가능한 웹 애플리케이션을 구축하는 모범 사례에 대해 설명합니다. Go 언어에 익숙하다 Go 언어는 Google에서 개발한 오픈 소스 프로그래밍 언어입니다. 간단하고 효율적이며 안전하며 동시성 웹 애플리케이션을 구축하는 데 사용할 수 있습니다. Go 언어를 사용하여 구축

이 기사는 Redux Hooks 사용에 대한 세부 사항에 대해 설명합니다. 도움이 되기를 바랍니다.

시나리오: 페이지에서 버튼을 클릭하면 수량이 증가하고, 버튼을 클릭하면 값이 변경되지 않습니다. import{useStore}from'@/vuex';conststore=useStore()constonSubmit=()=>{store.dispatch("incrementAction",1);}letcount=store.state.count{{count}}이유: 저장소 .state.count는 잘못된 값 방법이므로 꺼낼 수는 있지만 응답이 손실됩니다.

동적 프록시와 결합된 리플렉션을 사용하여 보기 및 이벤트 바인딩을 지원하는 보기 주석 바인딩 라이브러리를 구현합니다. 코드는 간결하고 사용하기 쉬우며 강력한 확장성을 갖습니다. 지원되는 기능 @ContentView는 setContentView() 대신 레이아웃을 바인딩합니다. @BindView는 findViewById() 대신 View를 바인딩합니다. @OnClick은 setOnClickListener() 대신 클릭 이벤트를 바인딩합니다. @OnLongClick은 setOnLongClickListener() 대신 길게 누르기 이벤트를 바인딩합니다. 코드 주석 클래스 @Target(ElementType.TYPE )@보유(보유

복잡한 프론트엔드 데이터 관리를 구현하기 위해 React와 Redux를 사용하는 방법 서문: 프론트엔드 기술의 지속적인 개발로 인해 프론트엔드 애플리케이션은 점점 더 복잡해지고 데이터 관리는 점점 더 중요해졌습니다. React와 Redux는 현재 널리 사용되는 프런트엔드 프레임워크이며 데이터를 관리하고 업데이트하는 데 효과적으로 도움을 줄 수 있습니다. 이 글에서는 React와 Redux를 사용하여 복잡한 프런트엔드 데이터 관리를 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. React 소개 React는 사용자 인터페이스를 구축하는 데 사용되는 JavaScript입니다.
