gpt4 book ai didi

javascript - 如何绑定(bind)事件处理函数,使其能够成功设置 React 状态?

转载 作者:行者123 更新时间:2023-11-30 20:11:49 26 4
gpt4 key购买 nike

我正在编写我的第一个 React 应用程序,以便在用户单击向上和向下箭头时按列对以下数据进行排序。截图如下:

enter image description here

这是我的 App.js:

import React, { Component } from 'react';
import Table from './Components/Table';
import './App.css';
import SATResultData from './SATResults.js';

class App extends Component {
constructor() {
super();
this.state = {
SATResultData: {},
columnToSort: '',
sortOrder: 'asc'
}
}

componentWillMount() {
this.setState({SATResultData: SATResultData});
}

render() {
return (
<main>
<Table SATResultData={this.state.SATResultData}/>
</main>
);
}
}

export default App;

这是我的 SATHeaderRow.js:

import React, { Component } from 'react';
import SATHeaderItem from './SATHeaderItem';

class SATHeaderRow extends Component {
render() {
let headerItems = this.props.headerRow.map(headerText => {
return (
<SATHeaderItem headerText={headerText}/>
);
});

return (
<tr>
{headerItems}
</tr>
);
}
}
export default SATHeaderRow;

这是我的 SATHeaderItem.js:

import React, { Component } from 'react';
import sortByColumn from '../Logic/sort';
import sorticon from './sort.svg';

class SATHeaderItem extends Component {
render() {
return (
<th>
{this.props.headerText} <img src={sorticon} alt="Sort ascending" onClick={sortByColumn}/>
</th>
)
}
}
export default SATHeaderItem;

最后,我的 sort.js 文件是:

const flipSortOrder = {
'asc': 'desc',
'desc': 'asc'
};

export default function sortByColumn(columnName) {
console.log('hello');
console.log(this.state.sortOrder);
this.setState({'sortOrder': flipSortOrder[this.state.sortOrder]});
}

我想添加一个 onClick 监听器,以便在单击 sorticon 时调用 sortByColumn。该函数被正确调用,但在 sortByColumn 的第二行抛出错误“无法读取未定义的属性‘state’”。我从其他答案中读到,例如 this one我需要绑定(bind)事件处理程序。然而:

因此,我的问题是:

  1. 在哪里添加 this.sortByColumn = this.sortByColumn.bind(this); 代码行?在 App 类的构造函数中,还是应该在 SATHeaderItem 类中创建一个新的构造函数,因为那是调用 sortByColumn 的地方?
  2. this.setState({'sortOrder': flipSortOrder[this.state.sortOrder]}); 行代码能否成功将“asc”翻转为“desc”,反之亦然?<

最佳答案

这是诀窍...

您甚至不需要导入您的 sort.js 文件,只需在您的组件中直接使用 setState 即可。

    import React, { Component } from 'react';
import sortByColumn from '../Logic/sort';
import sorticon from './sort.svg';

class SATHeaderItem extends Component {
constructor(props) {
super(props);
this.state = {
sortOrder: 'asc'
};
}
render() {
return (
<th>
{this.props.headerText}
<img src={sorticon} alt="Sort ascending"
onClick={() => this.setState(prevState => {(
sortOrder: (prevState.sortOrder === 'asc' ? 'desc' : 'asc')
)} }/>
</th>
)
}
}
export default SATHeaderItem;

关于javascript - 如何绑定(bind)事件处理函数,使其能够成功设置 React 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52323983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com