react如何点击更改数据。

本文介绍了在React中如何通过点击事件改变数据。首先创建login文件夹并设置入口文件及store,接着使用三元运算符根据reducer中的数据状态显示不同内容。利用connect的mapStateToProps获取reducer数据,并绑定点击事件触发action。在reducer中设置默认login数据,通过派发action和reducer更新数据。最后在组件中绑定点击事件,通过actionCreators派发action,更新state完成点击状态切换。

准备工作
首先创建一个login的文件夹,其中含有入口文件和store的文件在这里插入图片描述
这里正式开始啦!
思路:首先先要写一个三元判断,判断当reducer中数据是false或者true的时候应该显示的内容,并且获取reducer中的默认数据,然后绑定一个点击事件,当点击时去派发action然后通过reducer更改数据,这样就可以啦!!!
那么首先我们写一个判断

{
   this.props.login ? <div>退出</div> : <div>登录</div>
}

顺便使用connect中的mapStateToProps去获取数据(这里我已经使用了immutable,所以需要下载安装immutable,这里我就不多说啦,大家可以自行查阅immutable对象)

const mapStateToProps = (state) => {
    return {
        login: state.getIn(["login","login"])
    }
}

在reducer.js中写默认的login数据(同样这里使用了immutable中的fromJS,如果没有下载就用fromJS会报错哦)

const defaultState = fromJS({
    login:false
})

到这里,如果我们更改login的数据在页面上就会呈现不一样的效果,那么接下来就是如何自动更改reducer中的数据了!
想要改变store中的数据,就一定要走一个派发action的流程,下面就开始正式派发啦!
首先需要点击的时候去改变状态,那么就需要在登录上绑定一个点击事件,

 {
    this.props.login ? <div>退出</div> : <div onClick={this.props.changeState}>登录</div>
}

然后将绑定的方法写在mapDispatchToProps中,派发action传递给store(这里我创建了一个actionCreators的文件夹,所以需要在头部引入这个)

//顶部引入
import {actionCreators} from "./store";


const mapDispatchToProps = (dispatch) => ({
    changeState(){
        dispatch(actionCreators.changeState())
    }
})

现在转到actionCreators这个目录下(这里引入了actionTypes 所以需要引入)

import * as actionTypes  from "./actionTypes";
//在这里定义action,然后通过匹配type在reducer中执行更改state的值
const changeLogin = () => ({
    type:actionTypes.CHANGE_STATE,
    value:true
})
export const changeState = () => {
    return(dispatch) => {
        dispatch(changeLogin())
    }
}

在actionTypes.js中定义type的常量

export const CHANGE_STATE = 'login/CHANGE_STATE'

最后在reducer.js中就可以通过type来更改值了

import {fromJS} from 'immutable'
import * as actionTypes from "./actionTypes";
const defaultState = fromJS({
    login:false
})

export default (state = defaultState,action) => {
//这里通过判断type值去更改state的状态
    if(action.type === actionTypes.CHANGE_STATE){
        return state.set('login',action.value)
    }
    return state
}

到这里就完成了点击更改状态啦!

React 18 中修改数据的方法因组件类型而异。在类组件中,可通过 `this.setState()` 方法修改 `state` 中的数据。例如: ```jsx import React { Component } from 'react'; class App extends Component { state = { count: 0 } countHandler1 = () => { this.setState({ count: this.state.count + 1 }) } countHandler2 = () => { this.setState(prev => { return { count: prev.count + 1 } }) } render() { return <div> { this.state.count } <button onClick={this.countHandler1}>按钮</button> <button onClick={this.countHandler2}></button> </div> } } ``` 在上述代码中,`countHandler1` 和 `countHandler2` 两种方式都可以修改 `state` 中的 `count` 值,前者直接修改,后者使用回调函数,`prev` 指的是整个 `state` [^2]。 在修改前后端数据时,修改点击“保存”,会调用 `InfoDialog.js` 的 `handleOK()` 方法,将修改后的数据用 `post` 方法请求 `ApiUtil.API_STAFF_UPDATE`,对应于后端 `run.py` 文件中的 `updateStaff()` 函数。实际上是修改 `SqliteUtil.py` 中的 `addOrUpdateStaff()` 函数,增加修改部分。示例代码如下: ```python else: # 修改 update = '' isFirst = True for key, value in staff.items(): if key == 'id': continue if isFirst: isFirst = False else: update += ',' if value is None: value = "" if isinstance(value, str): update += (key + "='" + value + "'") else: update += (key + "=" + str(value)) where = "where id=" + str(id) sql = "update t_staff set %s %s" % (update, where) cursor.execute(sql) result = '更新成功' print(cursor.rowcount, result) ``` 这里是通过 SQL 语句更新 `t_staff` 表中的数据 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值