我正在尝试创建自定义的Select组件,它的行为非常像一个普通的超文本标记语言select,但是当选项列表被显示或隐藏时,我在将Select组件连接到redux来管理时遇到了问题。到目前为止,当我将多个Select组件放在屏幕上时,当我单击它们中的任何一个时,它们都会显示/隐藏它们的选项列表。到目前为止,我通过检查我的styled-component (简化)代码中的道具来切换实际的显示/隐藏。
Select.jsx
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
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
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 />组件呈现在同一个屏幕上,这些组件彼此独立地交互?
发布于 2017-10-03 22:44:32
看起来我的架构过于复杂了--在阅读了https://github.com/reactjs/redux/issues/1287和@Sivadass N评论后,我将使用setState来管理Select的状态,并将redux留给更多的全局操作。
https://stackoverflow.com/questions/46546827
复制相似问题