gpt4 book ai didi

reactjs - 父子组件中的 MapStateToProps 和 MapDispachToProps 不起作用

转载 作者:行者123 更新时间:2023-12-05 03:51:44 25 4
gpt4 key购买 nike

在我的 app.js 中,我有我的 mapDispachToProps 函数,它应该发送一个类型为:increment 的 Action 到 redux 存储中的 reducer。当 reducer 收到它时,他应该将初始状态递增 1。

在作为 app.js 组件子组件的标题组件中,我想通过 mapStateToProps 和 this.props.value 显示新值。问题是它不起作用,我在控制台中没有收到任何错误消息。

当我在 App.js 中执行所有操作时,它运行良好。

我做错了什么?

提前致谢

我的 index.js

let store = createStore(increaseReducer);

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

我的商店

export function increaseReducer(state = 0, action) {
if(action.type == "INCREMENT") {
return state+1;
}

else {
return state;
}
}
export default increaseReducer;

我的 app.js

import React, {Component} from 'react';
import{ connect }from 'react-redux';
import {Heading} from './components/heading';

class App extends Component {
constructor(props) {
super(props);
}
render() {
return (
<div className="App">
<Heading></Heading>
<button onClick={this.props.increment} > Counter</button>
</div>
);
}
}

let mapDispachToProps= {
increment:()=> {
return {type:"INCREMENT"}}
}

let AppContainer= connect(null,mapDispachToProps)(App);
export default AppContainer;

我的 heading.js

import React, {Component} from 'react';
import{ connect }from 'react-redux';

export class Heading extends Component {
constructor(props){
super(props);
}

render() {
return(
<h1>Click Counter: {this.props.value} </h1>
)
}
}

let mapStateToProps = (state)=>{return {
value: state
}}

let headingContainer = connect(mapStateToProps)(Heading);

export default headingContainer;

最佳答案

标题默认导出,所以在 App 中它应该是:

import Heading from './components/heading';

这是您的代码片段,它有效:

const {
Provider,
connect,
} = ReactRedux;
const { createStore } = Redux;
const { Component } = React;

function increaseReducer(state = 0, action) {
if (action.type == 'INCREMENT') {
return state + 1;
} else {
return state;
}
}
let store = createStore(increaseReducer);

//heading
class HeadingComponent extends Component {
constructor(props) {
super(props);
}

render() {
return <h1>Click Counter: {this.props.value} </h1>;
}
}

let mapStateToProps = (state) => {
return {
value: state,
};
};

let Heading = connect(mapStateToProps)(HeadingComponent);

class App extends Component {
constructor(props) {
super(props);
}
render() {
return (
<div className="App">
<Heading></Heading>
<button onClick={this.props.increment}>
{' '}
Counter
</button>
</div>
);
}
}

let mapDispachToProps = {
increment: () => {
return { type: 'INCREMENT' };
},
};

let AppContainer = connect(null, mapDispachToProps)(App);

ReactDOM.render(
<Provider store={store}>
<AppContainer />
</Provider>,
document.getElementById('root')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/4.0.5/redux.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-redux/7.2.0/react-redux.min.js"></script>


<div id="root"></div>

关于reactjs - 父子组件中的 MapStateToProps 和 MapDispachToProps 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62640685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com