interface IComponentState { numberList: number[]; } export class HomeComponent extends React.Component<ComponentProps, IComponentState> { private addNumber(): void { this.state.numberList.push(Math.random()); } }
This works, but would have to produce immutable explicitly:
private addNumber(): void { const newArray = [...this.state.numberList, Math.random()]; this.setState({numberList: newArray}); }
Producing immutable the convenient way, use immer:
private addNumber(): void { // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18365#issuecomment-390110697 this.setState(produce<IComponentState>(draft => { draft.numberList.push(Math.random()); })); }
Deleting an element from an array:
{this.state.numberList.map((n, i) => <div key={i}> {n} <button // tslint:disable jsx-no-lambda onClick={() => { this.state.numberList.splice(i, 1); }} > Non-working delete </button> <button // tslint:disable jsx-no-lambda onClick={() => { this.setState({ numberList: [ ...this.state.numberList.slice(0, i), ...this.state.numberList.slice(i + 1) ] }); }} > Delete using explicit immutable </button> <button // tslint:disable jsx-no-lambda onClick={() => { this.setState(produce<IComponentState>(draft => { draft.numberList.splice(i, 1); })); }} > Delete the easier way </button> </div> )}
Happy Coding!
No comments:
Post a Comment