我正在尝试学习 react-redux 架构,但我在最基本的东西上失败了。
我创建了 HomePage 类并使用 react-redux connect() 将其连接到商店的状态并进行调度。
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import {HomeButtonClickAction} from "./HomeActionReducer";
import {connect} from "react-redux";
class HomePage extends Component {
constructor(props) {
super(props);
console.log('HomePage props');
console.log(this.props);
this.buttonClicked = this.buttonClicked.bind(this);
}
buttonClicked() {
console.log('button cliked');
this.props.buttonClick();
}
render() {
console.log('Re-rendering...');
let toggleState = this.props.toggle ? 'ON' : 'OFF';
return (
<div>
<button onClick={this.buttonClicked}>{ toggleState }</button>
</div>
)
}
}
HomePage.propTypes = {
toggle: PropTypes.bool.isRequired,
onClick: PropTypes.func.isRequired
};
const mapStateToProps = (state, ownProps) => {
return {
toggle: state.toggle
}
};
const mapDispatchToProps = (dispatch, ownProps) => {
return {
buttonClick: () => {
dispatch(HomeButtonClickAction());
}
}
};
const HomeContainer = connect(
mapStateToProps,
mapDispatchToProps
)(HomePage);
export default HomePage;
但这对我不起作用。 HomeContainer 不会将 props 传递给 HomePage 组件。 我在 devtools 中收到了这些警告。
我的 index.js 看起来像这样。
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
import AppReducer from "./reducers/AppReducer";
import { createStore } from "redux";
import { Provider } from 'react-redux';
const store = createStore(AppReducer);
ReactDOM.render(
<Provider store={ store }>
<App/>
</Provider>,
document.getElementById('root')
);
registerServiceWorker();
和 AppReducer.js
import { combineReducers } from 'redux';
import { toggle } from '../home/HomeActionReducer';
const AppReducer = combineReducers({
toggle
});
export default AppReducer;
和 HomeActionReducer.js
const HOME_BUTTON_CLICK = 'HOME_BUTTON_CLICK';
export function toggle (state = true, action) {
console.log('toggle launched');
switch (action.type) {
case HOME_BUTTON_CLICK :
return !state;
default:
console.log('Toggle reducer default action');
return state;
}
}
export function HomeButtonClickAction() {
console.log('action emitted');
return {
type: HOME_BUTTON_CLICK
};
}
作为新手,我将非常感谢您的帮助:)
最佳答案
您正在导出 HomePage
,它是展示组件。您想要导出 HomeContainer
,它是通过 connect
将 props 传递给 HomePage
的容器。
所以替换这个
export default HomePage;
有了这个
export default HomeContainer;
也可以直接写
export default connect(mapStateToProps, mapDispatchToProps)(HomePage);
请注意,由于它是默认
导出,您可以根据需要命名导入,例如:
import HomePage from './HomePage' // even if it's HomeContainer that is exported
关于javascript - React-redux connect() 无法传递 props,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48335083/