function App() {
const [notes, setNotes] = useState(["1", "2", "3", "4", "5"]);
const [value, setValue] = useState("");
function getLiValue(index) {
setValue(notes[index]);
}
/* пытался сделать что-то вроде этого
но индекс-то undefined, добавляется не то или не так
function getBack(index) {
setNotes([
...notes.slice(0, index),
(notes[index] = value),
...notes.slice(index + 1),
]);
} */
const result = notes.map((note, index) => {
return (
<div>
<li key={index} onClick={() => getLiValue(index)}>
{note}
</li>
</div>
);
});
return (
<div>
<ul>{result}</ul>
<input
value={value}
onChange={(event) => setValue(event.target.value)}
onBlur={() => getBack()}
/>
</div>
);
}
export default App;
li
.const defaultEdit = {
index: -1,
value: '',
};
function App() {
const [ notes, setNotes ] = useState([...'12345']);
const [ edit, setEdit ] = useState(defaultEdit);
const onClick = ({ currentTarget: { dataset: { index } } }) =>
setEdit({ index: +index, value: notes[index] });
const onChange = ({ target: { value } }) =>
setEdit(edit => ({ ...edit, value }));
const onBlur = () => {
setNotes(notes => notes.map((n, i) => i === edit.index ? edit.value : n));
setEdit(defaultEdit);
};
return (
<div>
<ul>{notes.map((n, i) => (
<li data-index={i} onClick={onClick}>
{n}
</li>))}
</ul>
<input value={edit.value} onChange={onChange} onBlur={onBlur} />
</div>
);
}