码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-05-14 19:39:23      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:ons   one   turn   white   lists   padding   cas   fonts   pen   

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.

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

标签:ons   one   turn   white   lists   padding   cas   fonts   pen   

原文地址:http://www.cnblogs.com/Answer1215/p/6853327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!