【问题标题】:Uncaught TypeError: this.props.*** is not a function in React-redux app while calling a function from redux containerUncaught TypeError: this.props.*** is not a function in React-redux app while call a function from redux container
【发布时间】:2017-10-23 10:25:24
【问题描述】:

我有一个实现了 redux 的 react 应用程序,我收到了这个错误

未捕获的类型错误:this.props.updateDimensions 不是函数

在执行 App.js 时:-

class App extends Component {
  componentDidMount() {
    this.updateWindowDimensions();
    window.addEventListener("resize", this.updateWindowDimensions);
  }

  componentWillUnmount() {
    window.removeEventListener("resize", this.updateWindowDimensions);
  }

  updateWindowDimensions() {
    this.props.updateDimensions(window.innerWidth, window.innerHeight);
  }

  render() { .....

AppContainer.js 文件:-

import { connect } from "react-redux";
import App from "./App";
import { UPDATE_DIMENSIONS } from "../actions";

const mapStateToProps = (state, ownProps) => {
  return {
    screenWidth: state.screenSize.screenWidth,
    screenHeight: state.screenSize.screenHeight
  };
};

const mapDispatchToProps = (dispatch, ownProps) => {
  return {
    updateDimensions: (screenWidth, screenHeight) => {
      dispatch({ type: UPDATE_DIMENSIONS, screenWidth, screenHeight });
    }
  };
};

const AppContainer = connect(mapStateToProps, mapDispatchToProps)(App);

export default AppContainer;

这是调用 AppContainer 的 index.js:-

import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import { createStore } from "redux";
import rootReducer from "./reducers";
import { BrowserRouter as Router, Route } from "react-router-dom";
import "./index.css";
import AppContainer from "./App";
import registerServiceWorker from "./registerServiceWorker";
import "semantic-ui-css/semantic.min.css";

let store = createStore(rootReducer);

ReactDOM.render(
  <Provider store={store}>
    <Router>
      <Route component={AppContainer} />
    </Router>
  </Provider>,
  document.getElementById("root")
);
registerServiceWorker();

我认为这是一个常见错误,我到处查看,代码中似乎没有明显的缺陷。不确定问题出在哪里。

【问题讨论】:

    标签: javascript reactjs redux containers


    【解决方案1】:

    想通了。

    在 index.js 中:-

    从“./App”导入AppContainer;

    应该是

    从“./AppContainer”导入AppContainer;

    啊!如果 React 抛出一个错误说“AppContainer not found in ./App.js”,这会容易得多

    更新:-

    我还遇到了另一个错误,通过添加以下内容已修复:-

      constructor(props) {
        super(props);
        this.updateWindowDimensions = this.updateWindowDimensions.bind(this);
      }
    

    【讨论】:

    • “如果 React 抛出一个错误说 'AppContainer not found in ./App.js',这会容易得多” -- 你可能想试一试在 TypeScript 上,它可以在编译过程中检测到这些令人讨厌的错误。
    • 你可以使用箭头函数代替绑定
    【解决方案2】:

    我想你忘记了:

    constructor(props) {
       super(props);
    }
    

    【讨论】:

    • 对父构造函数的不必要调用
    • @Vivek,谢谢,我克服了最初遇到的错误,但之后又出现了另一个错误。并添加构造函数解决了这个问题。
    • @rawcode,如果对您有帮助,请您点赞吗?并接受答案,如果是答案?
    • 赞成,但这不是最初问题的答案。
    • 这个构造函数在这里不提供任何值。如果你打开开发者控制台,你可以看到 react 的关于 Useless constructor.. 的警告。
    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2020-07-11
    • 2021-10-02
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多