【发布时间】:2020-02-09 11:25:05
【问题描述】:
由于某种原因,我的this.state 调用没有更新我的roleClicked 函数中的状态。我似乎无法弄清楚问题是什么。代码如下:
import React, { Component } from 'react'
import { Redirect } from 'react-router-dom';
import instance from '../../../config/axios';
import ls from 'local-storage';
import Sidenav from '../../layout/Sidenav'
import isLoggedIn from '../../../helpers/isLoggedIn';
import redirectToLogin from '../../../helpers/redirectToLogin';
import apiErrorHandler from '../../../helpers/apiErrorHandler';
import RolesHeader from './RolesHeader';
import '../../../App.css'
import { Table, Pagination, Input, Alert } from 'antd';
export default class ViewRoles extends Component {
state = {
loggedIn: true,
roleSelected: false,
roleSelectedId: null,
rolesTable: {
columns: null,
dataSource: null,
currentPageNumber: null,
currentPageSize: null,
total: null,
},
filters: {
roleName: null
},
displays: {
createRoleView: false,
roleCreatedAlert: false,
},
errors: null
}
componentDidMount = () => {
//here i make AJAX calls to set rolesTables
}
roleClicked = (record) => {
console.log("clicked")
this.setState({
roleSelected: true,
roleSelectedId: record.key
})
}
render() {
if(this.state.roleSelected) {
const roleUrl = "/roles/" + this.state.roleSelectedId
return <Redirect to={roleUrl}/>
}
return (
<React.Fragment>
<Sidenav activeLink="roles"/>
<Table
className="border"
columns={this.state.rolesTable.columns}
dataSource={this.state.rolesTable.dataSource}
pagination={false}
onRow={(record) => {
return {
onClick: () => this.roleClicked(record)
}}}
/>
<Pagination
className="m-3"
current={this.state.rolesTable.currentPageNumber}
pageSize={this.state.rolesTable.currentPageSize}
total={this.state.rolesTable.total}
onChange={this.loadRolesTable}
/>
</React.Fragment>)
}
}
函数按预期运行,但状态未更新。知道可能是什么问题吗?
我在其他任何地方使用 this.setState 它都有效。完整代码可以在 link 上找到。
【问题讨论】:
-
调用这个函数有什么结果吗?函数调用后你试过
console.log(this.state)吗? -
onRow能正常工作吗? -
检查
record是否正确传递,是否未定义 -
此外,在您上面链接的代码中,您有
this.setState({ roleSelected: true, roleSelectedId: 1 }),因此无论您触发该处理程序多少次,它总是会得到相同的结果。仔细检查传递给roleClicked的内容是否正确。 -
我怀疑 onRow 工作不正常