javascript - 从 props 打印值,该值通过 mapStateToProps 从 redux 传递到组件

标签 javascript reactjs redux

问题:

我无法显示 redux 状态的值,该值是由 mapStateToProps 函数传递给组件的。

项目结构:

Create-react-app CLi 应用程序构建了项目。 在 src/内部我有以下代码结构

enter image description here

必要的代码: 我们正在交互的主页如下所示:

enter image description here

下面计划发布点击按钮的结果。

那么如何将 redux 状态和操作绑定(bind)到这两个组件:Calculator 和 ResultLine?

让我展示一下我在其中创建商店的 index.js 代码:

import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import { createStore } from "redux";
import reducers from './reducers/';

import App from './components/App';

ReactDOM.render(
    <Provider store={createStore(reducers)}>
        <App />
    </Provider>,
    document.getElementById("root")
);

只有三个操作:

import {CALCULATE, ERASE, PUT_SYMBOL} from "./types";

export const putSymbol = (symbol) => {
    return {
        type: PUT_SYMBOL,
        payload: symbol
    }
};

export const calculate = () => {
    return {
        type: CALCULATE
    }
};

export const erase = () => {
    return {
        type: ERASE
    }
};

在 App.js 中,我传递了 reducer ,它们将这些操作绑定(bind)到计算器组件:

import React, {Component} from 'react';
import Calculator from './Calculator';
import ResultLine from "./ResultLine";
import {calculate, erase, putSymbol} from "../actions/index";
import {connect} from "react-redux";

class App extends Component {

  render() {
    return (
      <div>
        <Calculator
          onSymbolClick={this.props.onSymbolClick}
          onEqualsClick={this.props.onEqualsClick}
          onEraseClick={this.props.onEraseClick}/>
        <br/>
        <ResultLine result={this.props.result}/>
      </div>
    );
  }
}

const mapStateToProps = (state) => {
  console.log('mapState', state.calc.line);
  return {
    result: state.line
  }
};

const mapDispatchToProps = {
  onSymbolClick: putSymbol,
  onEqualsClick: calculate,
  onEraseClick: erase
};

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

效果很好。每当我单击按钮时,状态就会发生变化,并且我会在控制台日志中观察到它,并在 mapStateToProps 函数中调用。

所以我希望我可以轻松地将 result 属性传递到 Result 行,并将其作为参数传递到 ResultLine 组件中。那么,让我们看看这个元素:

import React from 'react';

const ResultLine = ({result}) => {
  return (
    <p>{result}</p>
  );
};

export default ResultLine;

我在结果行中看不到任何变化。也许,React/Redux 生命周期管理和 ResultLine 组件出了问题,只是没有根据状态变化进行更新?

最佳答案

mapStateToProps 出现错误。

而不是:

const mapStateToProps = (state) => {
  return {
    result: state.line
  }
}

请使用:

const mapStateToProps = (state) => {
  return {
    result: state.calc.line // calc was missing here
  }
}

关于javascript - 从 props 打印值,该值通过 mapStateToProps 从 redux 传递到组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46377102/

相关文章:

javascript - 在 javascript 对象内执行回调函数

javascript - 当我使用 useChange 从数字键盘设置值时, Hook 调用无效

javascript - 如何使用 Typescript 扩展 Material-UI 主题?

使用唯一 ID 进行 Javascript 测试

javascript - 如何将 React 应用程序创建为服务/包并将其导入另一个应用程序的 'package.json'

reactjs - 编写 enzyme 测试时何时使用 "Component.WrappedComponent"

javascript - While 循环在 Google Chrome 控制台中不断崩溃

javascript - 使用自定义按钮过滤结果

Javascript 在页面上查找 URL

reactjs - 为什么我的 GlobalStyles 在使用样式化组件部署后不起作用?