首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Redux使用可重用的react组件

Redux使用可重用的react组件
EN

Stack Overflow用户
提问于 2017-10-03 22:18:38
回答 1查看 87关注 0票数 0

我正在尝试创建自定义的Select组件,它的行为非常像一个普通的超文本标记语言select,但是当选项列表被显示或隐藏时,我在将Select组件连接到redux来管理时遇到了问题。到目前为止,当我将多个Select组件放在屏幕上时,当我单击它们中的任何一个时,它们都会显示/隐藏它们的选项列表。到目前为止,我通过检查我的styled-component (简化)代码中的道具来切换实际的显示/隐藏。

Select.jsx

代码语言:javascript
复制
const DropDown = styled.div`
    ...
    display: ${props => props.dropDownShown ? 'block' : 'none'};
    ...
`;

const Select = ({toggleDropDown, dropDownShown}) => (
    <div>
        <span class="input" onClick={() => toggleDropDown()}>
            <span>Item 1</span>
            <img src={selectArrowClear}/>
        </span>
        <DropDown dropDownShown={dropDownShown}>
            <Option>Item 1</Option>
            <Option>Item 2</Option>
            <Option>Item 3</Option>
        </DropDown>
    </div>
);

export default Select;

SelectContainer.jsx

代码语言:javascript
复制
const toggleDropDown = () => ({
    type: 'TOGGLE_DROP_DOWN'
});


const mapStateToProps = state => ({
    dropDownShown: state.select.dropDownShown
});

const mapDispatchToProps = dispatch => ({
    toggleDropDown: () => {
        dispatch(toggleDropDown());
    }
});

const SelectContainer = connect(
    mapStateToProps,
    mapDispatchToProps
)(Select);

export default SelectContainer;

SelectReducer.js

代码语言:javascript
复制
const initialState = { dropDownShown: false };

const select = (state = initialState, action) => {
    switch (action.type) {
        case 'TOGGLE_DROP_DOWN': {
            return Object.assign({}, state, {
                dropDownShown: !state.dropDownShown
            });
        }
        default: return state;
    }
};

export default select;

我需要做什么才能让多个<SelectContainer />组件呈现在同一个屏幕上,这些组件彼此独立地交互?

EN

Stack Overflow用户

发布于 2017-10-03 22:44:32

看起来我的架构过于复杂了--在阅读了https://github.com/reactjs/redux/issues/1287和@Sivadass N评论后,我将使用setState来管理Select的状态,并将redux留给更多的全局操作。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46546827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档