3 回答

TA貢獻1827條經驗 獲得超8個贊
嘗試將 User.js 更改為以下內容
className 根據選擇的用戶動態設置
Referlink -代碼沙箱
import React from "react";
import { USERS_DATA } from "./data.js";
export default function User({ getUser, userSelected }) {
const selectUserClick = ({ target }) => {
let selectedUserIndex = USERS_DATA[target.value];
let username = `${selectedUserIndex.first_name} ${selectedUserIndex.last_name}
- ${selectedUserIndex.occupation}`;
let usermemo = `"${selectedUserIndex.catch_phrase}"`;
// userSelected = target.classList.toggle("selected");
getUser(username, usermemo, selectedUserIndex);
};
return (
<div className="users-container">
<ul>
{USERS_DATA.map((user, index) => (
<li
key={index}
value={user.id - 1}
onClick={selectUserClick}
className={`users ${
userSelected && user.id === userSelected.id ? "selected" : ""
}`}
>
{user.user_name}
</li>
))}
</ul>
</div>
);
}

TA貢獻1786條經驗 獲得超11個贊
在您的情況下,只要您不需要一次選擇多個選項,這樣的事情就可以工作。運行一個函數,獲取所有附加有“selected”類名的用戶,并在進行新選擇之前將其關閉。
const selectUserClick = ({ target }) => {
resetHighlights();
let selectedUserIndex = USERS_DATA[target.value];
let username = `${selectedUserIndex.first_name} ${selectedUserIndex.last_name} - ${selectedUserIndex.occupation}`;
let usermemo = `"${selectedUserIndex.catch_phrase}"`;
userSelected = target.classList.toggle("selected");
getUser(username, usermemo, userSelected);
};
function resetHighlights() {
var arr = document.getElementsByClassName("users");
for (var x = 0; x < arr.length; x++) {
if (arr[x].classList.contains("selected")) {
arr[x].classList.toggle("selected");
}
}
}

TA貢獻1757條經驗 獲得超8個贊
另一種方法是:
我在代碼中添加了簡短的注釋
export default function User({
getUser,
userSelected
}) {
const selectUserClick = ({
target
}) => {
let selectedUserIndex = USERS_DATA[target.value];
let username = `${selectedUserIndex.first_name} ${selectedUserIndex.last_name}
- ${selectedUserIndex.occupation}`;
let usermemo = `"${selectedUserIndex.catch_phrase}"`;
// get all li elements of selected users
let usersEl = document.getElementsByClassName("users selected");
let usersList = [...usersEl];
// assigns exisiting class to toggled class beforre selection
usersList.forEach((element) => {
element.className = "users";
});
// style only current selected el
userSelected = target.classList.toggle("selected");
getUser(username, usermemo, userSelected);
};
添加回答
舉報