Redux - 无法访问容器属性以将 api 凭据(从商店)传递到容器组件中的调用函数

空指针

适用于了解术语的人的快速版本:如何将我的 API 令牌传递给我的 redux 操作,而不将其传递给我传递(作为道具)回调函数以分派 API 调用操作的每个演示组件?API 函数更新后端数据库,然后更新 redux 存储。

我使用 connect 函数和 mapDispatchToProps 函数,并将一个调用 API 的函数传递给我的演示组件,该 API 修改后端数据库以及 redux 存储数据。我需要在我的 api 端点代码中对用户进行身份验证。我有一个 API 令牌,API 代码在数据库中查找该令牌以确保它有效且未过期。当我的 html 通过 html 头中的脚本标记创建以创建全局 javascript 变量时,会传入这些值。

我通过容器的 componentHasMounted 函数中的操作的初始分派将来自这些全局变量的 apiToken 存储在 redux 存储中。

使用全局 javascript 变量来获取演示组件中的 apiToken 值感觉不合适,因为它们是可移植的。

将 apiToken 传递给每个演示组件感觉不太对,因为该结构旨在减少传递给每个组件的 props 的数量。

对我来说,将 apiToken 凭据仅添加回 Container 组件是有意义的 - 所以我将凭据放入 mapDispatchToProps 函数内的 markAsComplete 函数调用中,将 auth 参数添加到从演示组件传递回的参数中我的容器组件。

但是,这不起作用,因为未定义 this.apiToken 和 this.byUserId - mapDispatchToProps 中的“this”与容器组件类的“this”不同。

其他人如何实现这一点?

我有一个这样的容器功能:

``

class Container extends Component {

  componentDidMount() {
    var storeState = this.context.store.getState();
    if (storeState && storeState.auth) {
      this.byUserId = storeState.auth.userId;
      this.apiToken = storeState.auth.apiToken;
      this.idOfChosenEntity = globalVarDeclaredInHtmlHeader;
    } else {
      this.byUserId     = false;
      this.apiToken     = false;
      this.idOfChosenEntity = false;
    }
    this.props.dispatch(Actions.fetchDataIntoStoreForChosenEntity(this.byUserId,this.apiToken,this.idOfChosenEntity));
  }

  render() {

    return (
      <DisplayComponent
        chosenEntitysData = {this.props.chosenEntitysData}
        markAsComplete = {this.props.markAsComplete}
      />
    );
  }

}
Container.contextTypes = {
     store: PropTypes.object
}
const mapDispatchToProps = (dispatch) => {

  return {
    dispatch: dispatch,
    markAsComplete: (idOfChosenEntity) => {
      dispatch(Actions.markAsComplete(this.byUserId,this.apiToken,idOfChosenEntity));
    },
  }
}
const mapStateToProps = state => {
  return {
    chosenEntitysData: state.chosenEntitysData
  };
};

export default connect(mapStateToProps,mapDispatchToProps )(Container)

``

我的后端 api 是一个 Laravel PHP 应用程序 - 它对用户进行身份验证,生成一个随机的 apiToken,将 apiToken 作为 users.apiToken 存储在 users 表中,并在 users.apiTokenExpiry 中过期。

空指针

我了解到 mapDispatchToProps 有第二个参数“ownProps”。

在我调用 ReactDOM.render 调用的地方,我包含了这样的全局变量:

ReactDOM.render(
    <Provider store={store}>
        <UserDetailsContainer
            userIdBy = {userIdBy}
            apiToken = {apiToken}

        />
    </Provider>,
    htmlElement
);

userIdBy 和 apiToken javascript 全局变量在头部的脚本标记中定义 - 我使用的是从 PHP (Laravel) 提供的刀片模板:

<script>
  var userIdBy = {{$byUserId}};
  var apiToken = '{{$apiToken}}';
</script>

mapDispatchToProps 我可以通过 ownProps 第二个可选参数来引用这些值:

const mapDispatchToProps = (dispatch,ownProps) => {

  return {
    dispatch: dispatch,
    markAsComplete: (idOfChosenEntity) => {
      dispatch(Actions.markAsComplete(ownProps.byUserId,ownProps.apiToken,idOfChosenEntity));
    },
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法访问组件中的 redux 状态

来自分类Dev

API调用返回正文,但无法访问属性

来自分类Dev

将函数从 mapDispatchToProps 传递给 react/redux 应用程序中的容器组件

来自分类Dev

无法访问容器的元素

来自分类Dev

无法访问Docker容器

来自分类Dev

无法访问存储在容器中的令牌

来自分类Dev

与 Redux 反应:将函数传递给子组件,在子组件中不带处理程序调用

来自分类Dev

如何使用redux saga将ID传递给API调用?

来自分类常见问题

将道具传递给react-redux容器组件

来自分类Dev

在响应中从父容器到子容器的API调用中传递数据

来自分类Dev

主机在Docker容器内无法访问

来自分类Dev

在Docker容器外部无法访问Nginx

来自分类Dev

主机在Docker容器内无法访问

来自分类Dev

无法访问ubuntu docker容器

来自分类Dev

无法访问 Docker 容器的暴露端口

来自分类Dev

Redux:无法将函数映射到属性

来自分类Dev

React-Redux存储或将prop中的api传递给组件,这是更好的方法

来自分类Dev

Docker Tomcat容器无法访问Postgres容器

来自分类Dev

容器无法访问其他容器端口

来自分类Dev

将值从组件传递到 Redux Store

来自分类Dev

React Redux道具验证中缺少的内容以及使用redux-observable从外部API初始化容器的推荐模式

来自分类Dev

容器中使用React-Redux(来自mapStateToProps)的数据未传递到组件视图

来自分类Dev

测试调用API的Redux操作

来自分类Dev

我无法访问控制器中的容器

来自分类Dev

git ssh无法访问docker容器中的gitlab

来自分类Dev

我无法访问控制器中的容器

来自分类Dev

无法访问 docker 中的 elasticsearch for windows linux 容器

来自分类Dev

无法访问在单独的 docker 容器中运行的 postgres

来自分类Dev

无法访问从主机共享的 lxd 容器中的文件

Related 相关文章

  1. 1

    无法访问组件中的 redux 状态

  2. 2

    API调用返回正文,但无法访问属性

  3. 3

    将函数从 mapDispatchToProps 传递给 react/redux 应用程序中的容器组件

  4. 4

    无法访问容器的元素

  5. 5

    无法访问Docker容器

  6. 6

    无法访问存储在容器中的令牌

  7. 7

    与 Redux 反应:将函数传递给子组件,在子组件中不带处理程序调用

  8. 8

    如何使用redux saga将ID传递给API调用?

  9. 9

    将道具传递给react-redux容器组件

  10. 10

    在响应中从父容器到子容器的API调用中传递数据

  11. 11

    主机在Docker容器内无法访问

  12. 12

    在Docker容器外部无法访问Nginx

  13. 13

    主机在Docker容器内无法访问

  14. 14

    无法访问ubuntu docker容器

  15. 15

    无法访问 Docker 容器的暴露端口

  16. 16

    Redux:无法将函数映射到属性

  17. 17

    React-Redux存储或将prop中的api传递给组件,这是更好的方法

  18. 18

    Docker Tomcat容器无法访问Postgres容器

  19. 19

    容器无法访问其他容器端口

  20. 20

    将值从组件传递到 Redux Store

  21. 21

    React Redux道具验证中缺少的内容以及使用redux-observable从外部API初始化容器的推荐模式

  22. 22

    容器中使用React-Redux(来自mapStateToProps)的数据未传递到组件视图

  23. 23

    测试调用API的Redux操作

  24. 24

    我无法访问控制器中的容器

  25. 25

    git ssh无法访问docker容器中的gitlab

  26. 26

    我无法访问控制器中的容器

  27. 27

    无法访问 docker 中的 elasticsearch for windows linux 容器

  28. 28

    无法访问在单独的 docker 容器中运行的 postgres

  29. 29

    无法访问从主机共享的 lxd 容器中的文件

热门标签

归档