Reactjs 单击React+更改状态;重演

Reactjs 单击React+更改状态;重演,reactjs,events,redux,pagination,onclick,Reactjs,Events,Redux,Pagination,Onclick,如何使用onClick事件更改currentPage状态的值?我想更改值后,点击按钮的页数 组成部分: import React from 'react'; import { connect } from 'react-redux'; import { setCurrentPage } from '../actions/pages'; const PageItem = ({ pageNumber }) => ( <li className="page-link"

如何使用onClick事件更改currentPage状态的值?我想更改值后,点击按钮的页数

组成部分:

import React from 'react';
import { connect } from 'react-redux';
import { setCurrentPage } from '../actions/pages';
const PageItem = ({ pageNumber }) => (
      <li className="page-link"
        onClick = {(e) => this.setCurrentPage(e) }
        id = { pageNumber }>
        { pageNumber }
      </li>
);
const mapStateToProps = (state) => {
  return {
    pages: state.pages.currentPage
  };
};
const mapDispatchToProps = (dispatch) => ({
  setCurrentPage: () => dispatch(setCurrentPage(pageNumber))
});
export default connect(mapStateToProps, mapDispatchToProps)(PageItem);
行动:

export const setCurrentPage = (currentPage) => ({
  type: 'SET_CURRENT_PAGE',
  currentPage
});

更新您的操作,如下所示。应调度操作,以便reducer能够处理它

export const setCurrentPage = (currentPage) => {
 return (dispatch) => {
  dispatch({type: 'SET_CURRENT_PAGE',currentPage);
 }
}

更新您的操作,如下所示。应调度操作,以便reducer能够处理它

export const setCurrentPage = (currentPage) => {
 return (dispatch) => {
  dispatch({type: 'SET_CURRENT_PAGE',currentPage);
 }
}

我纠正了你的一些错误。 首先,我假设您在根组件中创建了一个
提供程序
标记,并向存储创建了一个实例(如果您不确定,请发送App.js文件的内容)

//组成部分

constpageitem=({pageNumber,setCurrentPage})=>(
  • setCurrentPage(页码)} id={pageNumber} > {pageNumber}
  • ); 常量mapStateToProps=状态=>{ 返回{ 页面:state.currentPage }; }; const mapDispatchToProps={ setCurrentPage }; 导出默认连接( MapStateTops, mapDispatchToProps )(第页项目); const pagesReducerDefaultState={ 当前页:1 };
    一些想法:

    • 不能在函数中使用
      ,只能在类中使用
    • mapDispatchToProps
      可以与简单的Literal对象(如)一起使用。这样就不那么冗长了,因为您可能只会提到
      操作创建者
      (在您的示例中,
      setCurrentPage
    • 您已经在道具中发送了
      setCurrentPage
      ,因此您可以像我写的那样检索它。也许ES6在这里是神秘的,所以ES5的等价物将是:
    功能页面项(道具){
    返回(
    
  • props.setCurrentPage(props.pageNumber)} id={props.pageNumber} > {props.pageNumber}
  • ); };
    //减速器

    const initialState={
    当前页:1
    };
    导出常量缩减器=(状态=初始状态,操作)=>{
    开关(动作类型){
    案例“设置当前页面”:
    返回{
    currentPage:action.currentPage
    };
    违约:
    返回状态;
    }
    };
    
    • 您的状态是一个具有属性
      currentPage
      的对象。因此,还原程序必须返回此类对象(因此
      返回操作。currentPage
      不正确)

    我修复了您的一些错误。 首先,我假设您在根组件中创建了一个
    提供程序
    标记,并向存储创建了一个实例(如果您不确定,请发送App.js文件的内容)

    //组成部分

    constpageitem=({pageNumber,setCurrentPage})=>(
    
  • setCurrentPage(页码)} id={pageNumber} > {pageNumber}
  • ); 常量mapStateToProps=状态=>{ 返回{ 页面:state.currentPage }; }; const mapDispatchToProps={ setCurrentPage }; 导出默认连接( MapStateTops, mapDispatchToProps )(第页项目); const pagesReducerDefaultState={ 当前页:1 };
    一些想法:

    • 不能在函数中使用
      ,只能在类中使用
    • mapDispatchToProps
      可以与简单的Literal对象(如)一起使用。这样就不那么冗长了,因为您可能只会提到
      操作创建者
      (在您的示例中,
      setCurrentPage
    • 您已经在道具中发送了
      setCurrentPage
      ,因此您可以像我写的那样检索它。也许ES6在这里是神秘的,所以ES5的等价物将是:
    功能页面项(道具){
    返回(
    
  • props.setCurrentPage(props.pageNumber)} id={props.pageNumber} > {props.pageNumber}
  • ); };
    //减速器

    const initialState={
    当前页:1
    };
    导出常量缩减器=(状态=初始状态,操作)=>{
    开关(动作类型){
    案例“设置当前页面”:
    返回{
    currentPage:action.currentPage
    };
    违约:
    返回状态;
    }
    };
    
    • 您的状态是一个具有属性
      currentPage
      的对象。因此,还原程序必须返回此类对象(因此
      返回操作。currentPage
      不正确)

    您是否尝试过将
    返回({currentPage:action.currentPage})
    放在减速机中?是的,但仍然不起作用。将页面设置为onclick看起来是错误的,您尝试过吗
    onClick={()=>this.setCurrentPage(pageNumber)}
    我尝试了这个,但我得到了错误:未捕获类型错误:无法读取onClick(PageItem.js:7)上未定义的属性“setCurrentPage”的“setCurrentPage”删除
    方法已导入->
    onClick={()=>setCurrentPage(pageNumber)}
    您尝试过
    返回吗({currentPage:action.currentPage})
    在你的Reducer中?是的,但仍然不起作用。在onclick中设置页面看起来是错误的,你尝试过这个吗?
    onclick={()=>this.setCurrentPage(pageNumber)}
    我尝试过这个,得到错误:uncaughttypeerror:无法读取onclick(PageItem.js:7)中未定义的属性“setCurrentPage”删除
    this
    方法已导入->
    onClick={()=>setCurrentPage(pageNumber)}
    非常感谢您的时间。我也阅读了您的文章,这对我非常有帮助。非常感谢您的时间。我也阅读了您的文章,这对我非常有帮助。