首页 > 其他 > 详细

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

时间:2017-05-14 19:22:55      阅读:266      评论:0      收藏:0      [点我收藏+]

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!