3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
嘗試將 User.js 更改為以下內(nèi)容
className 根據(jù)選擇的用戶動(dòng)態(tài)設(shè)置
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貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
在您的情況下,只要您不需要一次選擇多個(gè)選項(xiàng),這樣的事情就可以工作。運(yùn)行一個(gè)函數(shù),獲取所有附加有“selected”類名的用戶,并在進(jìn)行新選擇之前將其關(guān)閉。
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貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
另一種方法是:
我在代碼中添加了簡短的注釋
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);
};
添加回答
舉報(bào)