是否可以在react组件库中使用redux和axios?

2j4z5cfb  于 2022-11-05  发布在  iOS
关注(0)|答案(1)|浏览(155)

我正在React中创建一个页面。比如说“联系我们”页面。整个组件必须是可重用的。这样其他团队就可以使用它了。这个组件将有自己的redux存储和使用axios的api调用。
我想确认的是,如果我将这个“联系我们”模块导出为npm包,它对其他团队是否适用?我之所以问这个问题,是因为其他团队的项目会有他们自己的redux存储和axios示例。我认为我们只能在一个应用中有一个redux存储,也许还有一个axios拦截器(尽管我可能对axios的看法是错误的)
有人能帮我吗,在这种情况下可以做些什么?有一件事是肯定的,我将不得不导出这个完整的组件作为npm包。

o0lyfsai

o0lyfsai1#

我要在这里回答给予你更多的细节:假设您的元件如下所示:
关于我们:

import React, { Component } from "react";
import PropTypes from "prop-types";

export class AboutUs extends Component {
   componentDidMount() {
    const { fetchData } = this.props;
    fetchData();
   }

   render() {
    const { data, loading, error } = this.props;
    if (loading) return <p>Loading</p>;
    if (error) return <p>{error}</p>;
    return (
      // whatever you want to do with the data prop that comes from the fetch.
    )
   }
}

AboutUs.defaultProps = {
 error: null,
};

// Here you declare what is needed for your component to work.
AboutUs.propTypes = {
 error: PropTypes.string,
 data: PropTypes.shape({
  id: PropTypes.number,
  name: PropTypes.string,
 }),
 fetchData: PropTypes.func.isRequired,
 loading: PropTypes.bool.isRequired,
};

这个组件只需要一些道具就可以工作,fetchData函数将是任何redux操作的调度。
因此,在其中一个将要使用组件库的应用程序中,假设它们有自己的存储,您可以这样做。
在您计划使用AboutUs组件的组件中。

import React from "react";    
import { connect } from "react-redux";
import { bindActionCreators } from "redux";
// this is the action that performs the data fetching flow.
import { fetchAboutUs } from "redux-modules/aboutUs/actions";
// The component that is above
import { AboutUs } from "your-component-library";

const mapDispatchToProps = dispatch => {
 return bindActionCreators(
  {
   fetchData: fetchDashboard,
  },
  dispatch
 );
};

const mapStateToProps = state => ({
 loading: state.aboutUsReducer.loading,
 error: state.aboutUsReducer.error,
 data: state.aboutUsReducer.data,
});

const ReduxAboutUs = connect(
 mapStateToProps,
 mapDispatchToProps
)(AboutUs);

// Use your connected redux component in the app.
const SampleComponent = () => {
 return <ReduxAboutUs />
}

这确保了你的组件可以在没有redux的情况下开箱即用,因为你可以显式地使用它而不需要redux依赖,只要传递常规的props,它就可以继续工作。同样,如果你有不同的应用程序要使用它,你可以控制你想使用存储的哪一部分来为这个组件注入props。proptype在这里非常有用,因为我们强制使用了一些道具,以便让开发人员知道我们需要传递什么,以便组件能够正常工作。

相关问题