Если вам не нужно изменять список, тогда this.props.someList
доступен из любого метода класса.
Однако, если вы хотите добавить / удалить элементы из этого списка из компонента без изменения someList
, тогда самое простое решение - объявить переменную nestedList
из источника someList
в классе конструктор (пример ниже, где state = {...}
, является синтаксическим сахаром для того же самого), а затем использовать состояние React для изменения этого нового списка.
Теперь вы можете либо отказаться от нового списка, либо вызвать создателя действий Redux, чтобы сохранить и обновить список реквизитов (следовательно, вы также можете сбросить оба списка, если исходный источник списка остается постоянным).
Рабочий пример: https://codesandbox.io/s/6w5r5o32qk
import React, { Component, Fragment } from "react";
import { connect } from "react-redux";
import { resetList, saveList } from "./listActions";
const newData = [
{
_id: "5b9c3b351e5f7d9b827df4ce",
index: 0,
guid: "048e6f79-c33c-42fc-83e3-05f5b467240d",
isActive: false,
balance: "$1,663.79",
picture: "http://placehold.it/32x32",
age: 23,
name: "Tonya Drake"
},
{
_id: "5b9c3b350e7b14d4c94043f2",
index: 1,
guid: "1e3daeeb-36fd-4e52-a30e-5dbaedec8438",
isActive: true,
balance: "$2,263.69",
picture: "http://placehold.it/32x32",
age: 40,
name: "Patricia Phelps"
}
];
class Example extends Component {
state = {
addButtonClicked: false,
saveButtonClicked: false,
nestedList: this.props.someList
};
componentDidUpdate = prevProps => {
if (prevProps.someList !== this.props.someList) {
this.setState({
nestedList: this.props.someList
});
}
};
addData = () => {
this.setState(prevState => ({
addButtonClicked: true,
nestedList: [...this.state.nestedList, newData]
}));
};
resetData = () => {
this.setState(prevState => {
this.props.resetList();
return {
addButtonClicked: false,
saveButtonClicked: false,
nestedList: this.props.someList
};
});
};
saveNewList = () =>
this.setState(prevState => {
this.props.saveList(this.state.nestedList);
return { saveButtonClicked: true };
});
render = () => (
<div style={{ textAlign: "center" }}>
<h1>Utilizing React State</h1>
<button
className="uk-button uk-button-primary uk-button-large"
type="button"
onClick={this.addData}
disabled={this.state.addButtonClicked || this.state.saveButtonClicked}
style={{ marginRight: 20 }}
>
Add Data
</button>
<button
type="button"
className="uk-button uk-button-danger uk-button-large"
onClick={this.resetData}
disabled={!this.state.addButtonClicked && !this.state.saveButtonClicked}
style={{ marginRight: 20 }}
>
Reset List
</button>
<button
type="button"
className="uk-button uk-button-secondary uk-button-large"
onClick={this.saveNewList}
disabled={
(this.state.addButtonClicked && this.state.saveButtonClicked) ||
(!this.state.addButtonClicked && !this.state.saveButtonClicked)
}
>
Save List
</button>
<pre style={{ height: 600, overflowY: "auto", textAlign: "left" }}>
State List
<code>{JSON.stringify(this.state.nestedList, null, "\t")}</code>
<br />
<br />
Props List
<code>{JSON.stringify(this.props.someList, null, "\t")}
);
}
экспорт по умолчанию подключиться (
state => ({someList: state.list}),
{resetList, saveList}
)(Пример);