来自容器组件的Redux分派操作
我有以下容器组件来自容器组件的Redux分派操作,redux,components,Redux,Components,我有以下容器组件 import { connect } from "react-redux"; import LoginComponent from "./Login"; import React from "react"; export class LoginContainerComponent extends React.Component { constructor( props ) { super( props ) } login( user
import { connect } from "react-redux";
import LoginComponent from "./Login";
import React from "react";
export class LoginContainerComponent extends React.Component {
constructor( props ) {
super( props )
}
login( username, password ) {
//Perform actual login here
this.props.onLoginClick();
}
render() {
return (<LoginComponent onLoginClick = {this.login} />);
};
}
const mapStateToProps = function ( state ) {
return {
currentState: 'Logged Out'
}
};
const mapDispatchToProps = function ( dispatch ) {
return {
onLoginClick: () => {
alert( 'login clicked' );
}
}
};
export default connect( mapStateToProps, mapDispatchToProps )( LoginContainerComponent );
从“react redux”导入{connect};
从“/Login”导入LoginComponent;
从“React”导入React;
导出类LoginContainerComponent扩展React.Component{
建造师(道具){
超级(道具)
}
登录(用户名、密码){
//在此处执行实际登录
this.props.onLoginClick();
}
render(){
返回();
};
}
const mapStateToProps=函数(状态){
返回{
当前状态:“已注销”
}
};
const mapDispatchToProps=功能(调度){
返回{
onLoginClick:()=>{
警报('login clicked');
}
}
};
导出默认连接(MapStateTops、mapDispatchToProps)(LoginContainerComponent);
正如您在render()方法中看到的,我将容器组件的login方法传递给LoginComponent,它是一个表示组件。这个想法是
在构造内部,必须将此绑定到登录方法
import { connect } from "react-redux";
import LoginComponent from "./Login";
import React from "react";
export class LoginContainerComponent extends React.Component {
constructor( props ) {
super( props )
this.login = this.login.bind(this);
}
login( username, password ) {
//Perform actual login here
this.props.onLoginClick();
}
render() {
return (<LoginComponent onLoginClick = {this.login} />);
};
}
const mapStateToProps = function ( state ) {
return {
currentState: 'Logged Out'
}
};
const mapDispatchToProps = function ( dispatch ) {
return {
onLoginClick: () => {
alert( 'login clicked' );
}
}
};
export default connect( mapStateToProps, mapDispatchToProps )( LoginContainerComponent );
从“react redux”导入{connect};
从“/Login”导入LoginComponent;
从“React”导入React;
导出类LoginContainerComponent扩展React.Component{
建造师(道具){
超级(道具)
this.login=this.login.bind(this);
}
登录(用户名、密码){
//在此处执行实际登录
this.props.onLoginClick();
}
render(){
返回();
};
}
const mapStateToProps=函数(状态){
返回{
当前状态:“已注销”
}
};
const mapDispatchToProps=功能(调度){
返回{
onLoginClick:()=>{
警报('login clicked');
}
}
};
导出默认连接(MapStateTops、mapDispatchToProps)(LoginContainerComponent);
这是必需的,因为如果您只将函数传递给组件,那么这将不再可用。但是,如果您“强制”-绑定到该方法,它是可用的 在构造内部,必须将此绑定到登录方法
import { connect } from "react-redux";
import LoginComponent from "./Login";
import React from "react";
export class LoginContainerComponent extends React.Component {
constructor( props ) {
super( props )
this.login = this.login.bind(this);
}
login( username, password ) {
//Perform actual login here
this.props.onLoginClick();
}
render() {
return (<LoginComponent onLoginClick = {this.login} />);
};
}
const mapStateToProps = function ( state ) {
return {
currentState: 'Logged Out'
}
};
const mapDispatchToProps = function ( dispatch ) {
return {
onLoginClick: () => {
alert( 'login clicked' );
}
}
};
export default connect( mapStateToProps, mapDispatchToProps )( LoginContainerComponent );
从“react redux”导入{connect};
从“/Login”导入LoginComponent;
从“React”导入React;
导出类LoginContainerComponent扩展React.Component{
建造师(道具){
超级(道具)
this.login=this.login.bind(this);
}
登录(用户名、密码){
//在此处执行实际登录
this.props.onLoginClick();
}
render(){
返回();
};
}
const mapStateToProps=函数(状态){
返回{
当前状态:“已注销”
}
};
const mapDispatchToProps=功能(调度){
返回{
onLoginClick:()=>{
警报('login clicked');
}
}
};
导出默认连接(MapStateTops、mapDispatchToProps)(LoginContainerComponent);
这是必需的,因为如果您只将函数传递给组件,那么这将不再可用。但是,如果您“强制”-绑定到该方法,它是可用的 react-redux可以为您提供这种类型的东西,而无需使用
connect
函数中很少使用的第三个参数创建自己的容器类:mergeProps
import { connect } from "react-redux";
import LoginComponent from "./Login";
import React from "react";
const mapStateToProps = function ( state ) {
return {
currentState: 'Logged Out'
}
};
const mapDispatchToProps = function ( dispatch ) {
return {
onLoginClicked: () => {
alert( 'login clicked' );
}
}
};
const mergeProps = function ( stateProps, dispatchProps ) {
return {
...stateProps,
onLoginClicked: (username, password) -> {
//Perform actual login here
dispatchProps.onLoginClicked()
}
}
};
export default connect( mapStateToProps, mapDispatchToProps, mergeProps )( LoginComponent );
这也不需要绑定容器的
登录功能。react-redux可以为您提供这类功能,而无需使用connect
函数中很少使用的第三个参数创建自己的容器类:mergeProps
import { connect } from "react-redux";
import LoginComponent from "./Login";
import React from "react";
const mapStateToProps = function ( state ) {
return {
currentState: 'Logged Out'
}
};
const mapDispatchToProps = function ( dispatch ) {
return {
onLoginClicked: () => {
alert( 'login clicked' );
}
}
};
const mergeProps = function ( stateProps, dispatchProps ) {
return {
...stateProps,
onLoginClicked: (username, password) -> {
//Perform actual login here
dispatchProps.onLoginClicked()
}
}
};
export default connect( mapStateToProps, mapDispatchToProps, mergeProps )( LoginComponent );
这也绕过了绑定容器的login
功能的需要