首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单击时激活React/Redux多个组件

在单击时激活React/Redux多个组件
EN

Stack Overflow用户
提问于 2020-07-21 12:55:57
回答 1查看 40关注 0票数 0

我正在学习React/Redux,除了课程之外,我还试图自己做一些事情。所以我正在复制我玩的一个叫做“流放之路”的游戏的地图集,但做了一些改动。例如,我试图“解决”的主要问题是单击一张地图,它会高亮显示该地图已完成,如果再次单击该地图,该地图将无法完成。如imgs中的示例:

Completed Maps

Uncompleted Maps

我的问题是,当我单击一个地图时,所有其他地图都被标记为已完成。在图像上只有2个地图,但有156个地图,显然我不想单击地图X并突出显示所有其他地图。

这是我加载每个Map的组件:

代码语言:javascript
复制
export default props => (
    <div className="regions">
        <Region region="haewark_hamlet">
            <Map
                map_title="Bog"
                map_name="bog"
                white_map={maps.haewark.bog.white}
                yellow_map={maps.haewark.bog.yellow}
                red_map={maps.haewark.bog.red}
                map_tier="3"
            />
            <Map
                map_title="Vaal Pyramid"
                map_name="vaal_pyramid"
                white_map={maps.haewark.vaal_pyramid.white}
                yellow_map={maps.haewark.vaal_pyramid.yellow}
                red_map={maps.haewark.vaal_pyramid.red}
                map_tier="3"
            />
        </Region>
        <Region region="tirns_end" />
        <Region region="glennach_cairns" />
        <Region region="new_vastir" />
        <Region region="lex_ejoris" />
        <Region region="lex_proxima" />
        <Region region="valdos_rest" />
        <Region region="lira_arthain" />
    </div>
);

这是我的地图组件:

代码语言:javascript
复制
const Map = props => {
    const { completed } = props;

    const toggleComplete = function () {
        completed ? props.mapUncomplete() : props.mapComplete();
    };

    return (
        <div className={`map ${props.map_name}`} id={props.map_name}>
            <div className="map-name">{props.map_title}</div>
            <img className="map-size" src={base_map} alt="base map" />
            <div className="map-tier-color">
                <img
                    className={`map-size ${props.map_name}-white`}
                    src={props.white_map}
                    alt={`${props.map_name} white map`}
                />
                <img
                    className={`map-size ${props.map_name}-yellow`}
                    src={props.yellow_map}
                    alt={`${props.map_name} yellow map`}
                />
                <img
                    className={`map-size ${props.map_name}-red`}
                    src={props.red_map}
                    alt={`${props.map_name} red map`}
                />
            </div>
            <div className="map-tier-number">Tier {props.map_tier}</div>

            <div
                className={`toggle-completed ${completed ? "completed-map" : ""}`}
                onClick={() => toggleComplete()}
            ></div>
        </div>
    );
};

const mapStateToProps = state => ({
    completed: state.poeapp.completed,
});

const mapDispatchToProps = dispatch =>
    bindActionCreators(
        {
            mapComplete,
            mapUncomplete,
        },
        dispatch,
    );

export default connect(mapStateToProps, mapDispatchToProps)(Map);

这是我的地图操作:

代码语言:javascript
复制
export const mapComplete = () => ({
    type: "MAP_COMPLETE",
    payload: true,
});

export const mapUncomplete = () => ({
    type: "MAP_UNCOMPLETE",
    payload: false,
});

这是我的Map Reducers:

代码语言:javascript
复制
const INITIAL_STATE = {
    completed: false,
};

export default (state = INITIAL_STATE, action) => {
    switch (action.type) {
        case "MAP_COMPLETE":
            return { ...state, completed: action.payload };
        case "MAP_UNCOMPLETE":
            return { ...state, completed: action.payload };
        default:
            return state;
    }
};

正如我所说的,我还在学习,我确信我做错了什么,我只是不知道是什么!如果我的疑问不够清楚,告诉我,我会试着重写它!谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-21 13:17:25

如果您只想将一些地图标记为已完成/未完成,您应该保留一个结构,以了解哪些已完成,哪些未完成。

例如,你的商店应该看起来像这样:

代码语言:javascript
复制
{
   ...
   completed: [0,2,3,...,78,90],
}

您可以推断,如果映射ID不在该数组中,则映射未完成。在这种情况下,你的动作创建者也应该改变。您必须提供您正在引用的map的标识符,而不是仅仅传递一个map是否完整。

显然,这只是一个例子,并不是解决问题的最佳实现。这取决于你找到适合你的问题的那个。然而,基本的想法仍然是相同的:你必须提供给你的组件,动作创建者,以便你的reducers,你想要应用你的动作的地图的标识符。

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

https://stackoverflow.com/questions/63007664

复制
相关文章

相似问题

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