所以我想要的就是
我在List组件中传递一个数组,像这样:
& lt;列表项={("A","B","C"]}/祝辞
现在我需要打印list中的每个元素,像这样:
●●B●C
但是当有人点击列表元素时,该元素应该出现在第一位。例如:如果我点击B,那么输出应该是这样的:
●B●一个●C
有任何解决方案,请帮助。
你可以这样做
const List = ({items}) => {
const [list, setList] = useState(items)
return <ul>{list.map((l, i) =>
<li
onClick={() => setList([l, ...items.filter(item => item !== l)])}
key={i}>
{l}
</li>)}
</ul>
}
-
创建一个想要移动的值的副本
-
创建一个没有
filter
值的数组副本。如果有索引,则为splice
。 -
使用
将值添加到Array副本中unshift
-
设置你的状态为Array copy
医生:https://love2dev.com/blog/javascript-remove-from-array/https://www.w3schools.com/jsref/jsref_unshift.asp: ~:文本= % 20平移()% 20方法% 20补充道,原来方法% 20覆盖% 20 % 20 % 20数组。
const Home = () => {
const [myList, setMyList] = useState(["A","B","C"]);
function shiftPlace(from, to) {
const arr = myList;
let cutOut = arr.splice(from, 1)[0];
arr.splice(to, 0, cutOut);
setMyList([...arr]);
}
return (<div>
{
myList.map((v, i) => {
return <span key={i} onClick={() => {
shiftPlace(i, 0);
}}>{v}</span>;
})
}
</div>);
};
这是你需要的一切。