首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将SPFx和Reactjs更改为SPFx React-Redux?

如何将SPFx和Reactjs更改为SPFx React-Redux?
EN

Stack Overflow用户
提问于 2018-08-07 15:54:03
回答 1查看 572关注 0票数 1

我目前正在开发一个与SharePoint框架(SPFx)的应用程序,我需要使用Redux。

它是关于控制产品的库存,当产品很少的时候会有通知,并且有产品采购审批。

我的应用程序或多或少具有以下外观:

Main View通过单击通知的优先级,它将更改类别菜单和产品卡片,并以以下方式显示自己:

Priority View您拥有的功能是:

1.-按任何文本进行搜索2.-根据产品3的类型,过滤器是动态的。-类别菜单根据卡的类型4.-卡的类型或所选优先级的不同而变化5.-在屏幕上滚动时,加载更多的卡

我的问题是我不能用React-Redux重写React JS代码。

我最初只设法加载了所有组件,并且当它们单击某个优先级和涉及多个组件同时更改的其他事件时,我没有设法更改产品和类别菜单。

如果您可以通过一些代码来举例说明这些组件的交互是如何实现的,那么您可以帮助我。

ProductsActions.ts

代码语言:javascript
复制
export function loadProducts(data, webUrl) {
    console.log('Load Products...');
    if(data == null) {
        return function(dispatch) {
            return Data.getProducts().then(products => {
                dispatch({
                    type: ActionTypes.LoadProducts,
                    cards
                });
            });
        }
    }
}

productsReducer.ts

代码语言:javascript
复制
export default function productsReducer(state = initalState.products, action) {
    switch(action.type) {
            case ActionTypes.LoadProducts:
                let allProducts = [...state, ...action.products];
                return objectAssign(
                    {},
                    state,
                    {
                        products: allProducts
                    }
        );
            default:
                return state;
    }
}

productsContainer.ts

代码语言:javascript
复制
export default connect(
    (state) => {
        console.log(state);
        return {
            products: state.filterProducts
        };
    }
)(ProductsViewer);

Dashboard.tsx

代码语言:javascript
复制
export default class Dashboard extends React.Component<{Some Props}> {
  public render(): React.ReactElement<{Some Props}> {
    return (
      <div>
        <SearchBar />
        <Notifications />
        <Filters />
        <MenuCategory />
        <ProductsContainer />
      </div>
    );
  }
}

但是,动作和缩减程序如何交互,以便在选择过滤器时过滤产品列表,或者在选择通知的优先级时更改类别菜单和产品列表

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 23:02:15

当您想要从多个缩减程序中影响状态的属性时,必须在单个缩减程序中管理操作。

单击产品类型时,操作是在MenuCategory reducer中处理的,但现在是在产品reducer中完成的:

ProductsReducer.ts

代码语言:javascript
复制
export default function productsReducer(state = [], action) {
    switch(action.type) {
            case ActionTypes.LoadProducts:
                let allProducts = [...state, ...action.products];
                return objectAssign(
                    {},
                    state,
                    {
                        products: allProducts
                    }
                );
            case ActionTypes.ViewProductsByType:
                console.log(state);
                return objectAssign(
                    {},
                    state,
                    {
                    typeProducts: action.pType
                    }
                );
            default:
            return state;
    }
}

在使用bindActionCreators选择产品类型时处理单击事件

MenuCategoryContainer.ts

代码语言:javascript
复制
import { connect } from "react-redux";
import { bindActionCreators } from "../../../../node_modules/redux";
import { viewCardByType } from "../actions/menuCategoryActions";
import { loadCategoryMenu } from '../reducers';
import MenuCategory from '../components/menuCategory/MenuCategory';

export default connect(
    (state) => {
        console.log(state);
        return {
            menuItems: loadCategoryMenu(state)
        };
    }, (dispatch) => {
        return {
            onClickType: bindActionCreators(viewProductByType, dispatch)
        };
    }
)(MenuCategory);

通过这种方式,我能够在减速器的单个状态下影响来自不同组件的单个属性,我希望这是正确的方法

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

https://stackoverflow.com/questions/51721627

复制
相关文章

相似问题

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