Вы просто не хотите добавлять следующее поле содержимого 'note' к существующему значению в localStorage ... следующий код считывает значение localStorage для componentDidMount;и затем при каждом нажатии кнопки обновляет (а не заменяет) массив localStorage ...
релевантный компонент :
class App extends Component {
constructor(props) {
super(props);
this.state = {
inputs: [],
lastInput: ''
};
this.click = this.click.bind(this);
}
componentDidMount() {
this.getExistingArray();
}
getExistingArray() {
if (localStorage.getItem('inputs')) {
var storedInputs = localStorage.getItem('inputs');
this.setState({ inputs: storedInputs }, function () { console.log("from localStorage We got:", this.state.inputs); });
}
}
click() {
var newInput = [...this.state.inputs, this.state.lastInput];
localStorage.setItem('inputs', newInput);
this.getExistingArray();
}
recordInput(e) {
this.setState({ lastInput: e.target.value });
}
render() {
return (
<div>
<input type='text' onChange={this.recordInput.bind(this)} />
<button onClick={this.click}>Click to update the Array</button>
<br /> Array: {this.state.inputs}
</div>
);
}
}
завершено работаетstackblitz
ОБНОВЛЕНИЕ : следующая функция обновлена в свете комментария опрашивающего
click() {
var newInput = [...this.state.inputs, this.state.lastInput];
localStorage.setItem('inputs', newInput);
this.getExistingArray();
var newInputTag = 'inputs' + this.state.inputs.length;
localStorage.setItem(newInputTag, this.state.lastInput);
}
ОБНОВЛЕНИЕ2 : все локальные объекты хранения извлечены и напечатанына странице
class App extends Component {
constructor(props) {
super(props);
this.state = {
inputs: [],
lastInput: '',
localStoragePairs: []
};
this.click = this.click.bind(this);
}
componentDidMount() {
this.getExistingArray();
}
getExistingArray() {
for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
var value = localStorage.getItem(key);
var updatedLocalStoragePairs = this.state.localStoragePairs;
updatedLocalStoragePairs.push({ 'keyName': key, 'valueName': value });
this.setState({ localStoragePairs: updatedLocalStoragePairs });
}
console.log("complete localStoragePairs:", this.state.localStoragePairs);
if (localStorage.getItem('inputs')) {
var storedInputs = localStorage.getItem('inputs');
this.setState({ inputs: storedInputs }, function () { console.log("from localStorage We got:", this.state.inputs); });
}
}
click() {
var newInput = [...this.state.inputs, this.state.lastInput];
localStorage.setItem('inputs', newInput);
this.getExistingArray();
var newInputTag = 'inputs' + this.state.inputs.length;
localStorage.setItem(newInputTag, this.state.lastInput);
}
recordInput(e) {
this.setState({ lastInput: e.target.value });
}
render() {
var LocalSotrageContent = this.state.localStoragePairs.map((value, index) => {
return <tr key={index}> <td>{value.keyName}</td> <td>{value.valueName}</td> </tr>
});
return (
<div>
<input type='text' onChange={this.recordInput.bind(this)} />
<button onClick={this.click}>Click to update the Array</button>
<table>
<thead>
<tr>
<th>All Local Storage objects by Name</th>
<th>All Local Storage objects by Value</th>
</tr>
</thead>
<tbody>
{LocalSotrageContent}
</tbody>
</table>
<br />
</div>
);
}
}