#reactjs #react-state #react-class-based-component
#reactjs #react-state #компонент на основе класса react
Вопрос:
Я знаю, как это можно сделать с функциональными компонентами. Но когда дело доходит до компонентов класса, у меня возникает несколько вопросов, требующих уточнения.
У меня здесь есть класс,
class MyTable extends Component {
constructor(props) {
super(props);
this.state = {
page:0,
rowsPerPage:10
}
}
handleChangePage(event) {
//Here I want to update only **page** keeping **rowsPerPage** intact
}
handleChangeRowsPerPage(event) {
//Here I want to update only **rowsPerPage** keeping **page** intact
}
render() {
return(
<SomeComponent
onChangePage={this.handleChangePage}
onChangeRowsPerPage={this.handleChangeRowsPerPage}
/>
)
}
}
export default Mytable;
Итак, вот что я хочу знать,
-
Если я хочу обновить только страницу внутри объекта состояния, должен ли я сохранять rowsPerPage и обновлять их оба как
this.setState({page:<updatedValue>, rowsPerPage:<preservedValue>);
и наоборот -
Какой код находится внутри handleChangePage и handleChangeRowsPerPage, если мы можем обновлять независимые свойства внутри объекта состояния.
-
Какова наилучшая практика, когда у нас есть несколько таких состояний, и мы хотим обновить каждое из них независимо?
Ответ №1:
Вы можете обновлять page
и rowsPerPage
независимо, как я сделал ниже. Вам нужно просто вызвать this.setState
и передать объект с key
состоянием, которое вы хотите обновить
class MyTable extends React.Component {
constructor(props) {
super(props);
this.state = {
page:0,
rowsPerPage:10
}
this.handleChangePage = this.handleChangePage.bind(this);
this.handleChangeRowsPerPage = this.handleChangeRowsPerPage.bind(this);
}
handleChangePage(event) {
//Here I want to update only **page** keeping **rowsPerPage** intact
this.setState({page: event.target.value});
}
handleChangeRowsPerPage(event) {
//Here I want to update only **rowsPerPage** keeping **page** intact
this.setState({rowsPerPage: event.target.value});
}
render() {
return (
<div>
<div>
Page <input type="text" value={this.state.page} onChange={this.handleChangePage} />
</div>
<div>
rowsPerPage <input type="text" value={this.state.rowsPerPage} onChange={this.handleChangeRowsPerPage} /></div>
</div>
)
}
}
ReactDOM.render(<MyTable />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>