【发布时间】:2021-04-02 12:51:03
【问题描述】:
我正在尝试将具有继承的 React 类转换为功能组件,并且不会错过任何功能。到目前为止,我阅读了大量文章,但无法弄清楚如何做到这一点。主要问题是我的父组件修改了子组件的状态。
# Base class
class BaseTable extends React.Component {
// function to filter table when search text is changed
_onChangeText = (ev, text) => {
// storing filterText as a state, so onDropdownChange() can refresh filter
this.setState({ filterText: text });
if (this.state.items[0] && this.state.items[0].hasOwnProperty(this.state.filterBy)) {
// refreshing the filteredItems array with new query
this.setState({
filteredItems: text ? this.state.items.filter(item => item[this.state.filterBy].toLowerCase().indexOf(text.toLowerCase()) > -1) : this.state.items,
selectedPageIndex: 0
});
}
};
}
export default BaseTable;
通过this引用扩展它并使用父类方法的子类:
class SpecificTable extends BaseTable {
constructor(props) {
super(props);
}
this.state = {
items: [],
filteredItems: [],
filterText: "",
selectedPageIndex: 0,
isError: false,
errMsg: ''
};
return (
<TextField
label="Search Query:"
onChange={this._onChangeText}
styles={controlStyles}
value={this.state.filterText}
/>
);
}
export default SpecificTable;
目标是将其转换为没有类的功能组件,并重用 BaseTable 中的这些功能,因为我有一些“SpecificTables”。我正在考虑创建 ReactContext,但仍然遇到问题。
【问题讨论】:
-
您需要发布您尝试过的内容以及您认为哪里出错了。
-
React 明确鼓励组合优于继承——即从 React.Component 以外的东西扩展的类组件是一种反模式。如果您已经转换为功能组件,那么现在是摆脱它的好时机。您可以通过钩子重用函数。
标签: javascript reactjs react-functional-component