[Recompose] Add Local State with Redux-like Reducers using Recompose

Learn how to use the ‘withReducer‘ higher order component using the alternative reducer form. If you like using reducers in redux, you’ll be able to reuse that same technique but for local state.

import React from ‘react‘;
import {withReducer, withHandlers, compose} from ‘recompose‘;

const UserStyle = {
    position: ‘relative‘,
    background: ‘lightblue‘,
    display: ‘inline-block‘,
    padding: ‘10px‘,
    cursor: ‘pointer‘,
    marginTop: ‘50px‘
};

const StatusListStyle = {
    background: ‘#eee‘,
    padding: ‘5px‘,
    margin: ‘5px 0‘
};

const TooltipStyle =  {
    fontSize: ‘10px‘,
    position: ‘absolute‘,
    top: ‘-10px‘,
    width: ‘80px‘,
    background: ‘#666‘,
    color: ‘white‘,
    textAlign: ‘center‘
};

const StatusList = () =>
    <div style={StatusListStyle}>
        <div>pending</div>
        <div>inactive</div>
        <div>active</div>
    </div>;

const withToggle = compose(
    withReducer(‘toggleState‘, ‘dispatch‘, (state = false, action) => {
        switch(action.type) {
            case ‘SHOW‘:
                return true;
            case ‘HIDE‘:
                return false;
            case ‘TOGGLE‘:
                return !state;
            default:
                return state;
        }
    }, false),
    withHandlers({
        toggle: ({dispatch}) => (e) => dispatch({type: ‘TOGGLE‘}),
        show: ({dispatch}) => (e) => dispatch({type: ‘SHOW‘}),
        hide: ({dispatch}) => (e) => dispatch({type: ‘HIDE‘})
                 })
);

const Statue = withToggle(
    ({ status, toggle, toggleState }) =>
        (<span onClick={() => toggle(!toggleState)}>
            {status}
            {toggleState && <StatusList/>}
        </span>)
);

const Tooltip = withToggle(({ show, hide, toggleState, text, children }) => (
    <span>
        <span>
            {toggleState && <div
                style={TooltipStyle}>
                { text }
            </div>}
             <span
                 onMouseOver={show}
                 onMouseOut={hide}
             >
                { children }
            </span>
        </span>
    </span>
));

const User2 = ({ status, name }) => (
    <div style={UserStyle}>
        <Tooltip text="Cool Dude!">{name}</Tooltip>-
        <Statue status={status}/>
    </div>
);

export default User2;

‘withReducer‘ take (state_name, dispatch_function, reducer_function, init_state) as params.

时间: 2024-10-19 07:23:53

[Recompose] Add Local State with Redux-like Reducers using Recompose的相关文章

[Recompose] Add Local State to a Functional Stateless Component using Recompose

Learn how to use the 'withState' and 'withHandlers' higher order components to easily add local state to—and create a reusable local state pattern for—your functional stateless components. No need for classes! withState: const Statue = withState('sho

[Recompose] Add Lifecycle Hooks to a Functional Stateless Component using Recompose

Learn how to use the 'lifecycle' higher-order component to conveniently use hooks without using a class component. import React from 'react'; import { withReducer, withHandlers, compose, lifecycle } from 'recompose'; // Mock Configuration function fe

[Redux] Supplying the Initial State

We will learn how to start a Redux app with a previously persisted state, and how it merges with the initial state specified by the reducers. The initial state of store is defined by the rootReducers: const todoApp = combineReducers({ todos, visibili

【13】react 之 redux(2)

转载:http://www.cnblogs.com/MuYunyun/p/6530715.html 什么情况需要用redux? 用户的使用方式复杂 不同身份的用户有不同的使用方式(比如普通用户和管理员) 多个用户之间可以协作 与服务器大量交互,或者使用了WebSocket View要从多个来源获取数据 简单说,如果你的UI层非常简单,没有很多互动,Redux 就是不必要的,用了反而增加复杂性.多交互.多数据源场景就比较适合使用Redux. 设计思想: Web 应用是一个状态机,视图与状态是一一对

读redux有感: redux原来是这样操作的。

2017.9.10日 教师节 : ~当一个事物你没有接触,但是生活中 常常用到他,你就不得不去了解他了. 注:新手可以看一下,毕竟博主也是个菜鸟,没法写高深的东西,不想看博主扯淡的直接看第三节啦~~ 1. 生活随笔 经过半年的不懈努力(找工作),终于再任职了两个创业公司后,进入到了一个D轮中大型公司. 在上半年,第一份工作做了三个月的nodejs前端(写node的前端),回学校后就不再去了.回杭州后第二份工作比较坑,老板小人,员工一波一波的离职,我也离职了快2个月,还没给我工作,这老板人无力吐槽

深入Redux架构

关于redux 之前写了一篇通过一个demo了解Redux,但对于redux的核心方法没有进行深入剖析,在此重新总结学习,完整的代码看这里.(参考了React 技术栈系列教程) 什么情况需要用redux? 用户的使用方式复杂 不同身份的用户有不同的使用方式(比如普通用户和管理员) 多个用户之间可以协作 与服务器大量交互,或者使用了WebSocket View要从多个来源获取数据 简单说,如果你的UI层非常简单,没有很多互动,Redux 就是不必要的,用了反而增加复杂性.多交互.多数据源场景就比较

React中Redux的有关知识

Redux的设计思想很简单,就两句话. * Web应用是一个状态机,视图与状态是一一对应的* 所有的状态,保存在一个对象里面 Store: Store就是保存数据的地方,你可以把它看成一个容器.整个应用只能有一个Store. Redux提供createStore这个函数,用来生成Store. import { createStore } from 'redux'; const store = createStore(fn); 上面代码中,createStore函数接受里呢一个函数作为参数,返回新

redux简明学习

前面的话 这几天被redux折腾的够呛,看了很多视频,也看了很多资料.很多时候,感觉好像顿悟了,但实际上只是理解了其中的一个小概念而已.真正去做项目的时候,还是会卡壳.可能是学CSS和Javascript时花的时间太久了,学redux的时候有点浮躁.还有就是redux内容实在是不少,全部都看都理解,好像没什么必要.不看吧,用的时候总是有点力不从心.于是,决定把这些资料按自己的理解写成博客,方便自己回忆思路,也希望能帮助到需要的人 核心概念 redux专注于状态管理,把所有的状态都存在一个对象中.

React深入 - 手写redux api

简介: 手写实现redux基础api createStore( )和store相关方法 api回顾: createStore(reducer, [preloadedState], enhancer) 创建一个 Redux store 来以存放应用中所有的 state reducer (Function): 接收两个参数,当前的 state 树/要处理的 action,返回新的 state 树 preloadedState: 初始时的 state enhancer (Function): stor