有没有办法在加载时将此 .map 方法中的第一个元素设置为默认值 class?
Is there a way to set the first element in this .map method to a default class on load?
我目前正在 React 中使用 .map 方法渲染三个按钮。
正在从 useState 中的数组中提取按钮。
单击时,按钮会添加一个 .active class。
如何在页面首次加载时将第一个元素设置为具有 .active class?
当前代码:
https://codesandbox.io/s/recursing-lake-oetxj?file=/src/App.js
尝试将第一个 activeObject 设置为一个设置变量,但没有成功。
我也尝试使用另一个 useState 但无法弄清楚如何 link 这两个。还尝试了 useEffect 在第一次渲染时加载初始状态,但也不知道如何 link。
做这样的事情怎么样:
function toggleActiveStyles(index, id) {
if (buttons.activeObject) {
return id === buttons.activeObject.id ? "active" : "inactive";
} else {
return index === 0 ? "active" : "inactive";
}
}
并在 HTML
。 :
{ buttons.objects.map((elements, index) => (
<button
key={index}
className={toggleActiveStyles(index, elements.id)}
onClick={() => toggleActive(index)}
>
{elements.name}
</button>o
现场演示:
Demo
在我看来,您应该使用对象的 ID 来识别它们是否处于活动状态,这会让您的生活更轻松:
当您尝试定义 类 时,您正在比较活动对象和您的元素的引用,因此很难有一个默认的活动对象,使用 ids(数字),您可以比较更容易获得价值。
这是一个使用 id 的重构:https://codesandbox.io/s/elegant-buck-z7ter?file=/src/App.js
你可以用useEffect()
useEffect(() => {
toggleActive(0);
}, []);
https://codesandbox.io/s/vigilant-hopper-4we6k?file=/src/App.js
我认为 useEffect 是正确的选择,您已经有了将 class 设置为活动的方法,您只需在 useEffect 挂钩中调用它,以便在组件首次呈现时调用它用你想要的参数。像这样:
useEffect(()=>{
//here we set the default class
toggleActive(0, buttons.objects[0].name)
}, [])
我目前正在 React 中使用 .map 方法渲染三个按钮。 正在从 useState 中的数组中提取按钮。
单击时,按钮会添加一个 .active class。
如何在页面首次加载时将第一个元素设置为具有 .active class?
当前代码: https://codesandbox.io/s/recursing-lake-oetxj?file=/src/App.js
尝试将第一个 activeObject 设置为一个设置变量,但没有成功。 我也尝试使用另一个 useState 但无法弄清楚如何 link 这两个。还尝试了 useEffect 在第一次渲染时加载初始状态,但也不知道如何 link。
做这样的事情怎么样:
function toggleActiveStyles(index, id) {
if (buttons.activeObject) {
return id === buttons.activeObject.id ? "active" : "inactive";
} else {
return index === 0 ? "active" : "inactive";
}
}
并在 HTML
。 :
{ buttons.objects.map((elements, index) => (
<button
key={index}
className={toggleActiveStyles(index, elements.id)}
onClick={() => toggleActive(index)}
>
{elements.name}
</button>o
现场演示:
Demo
在我看来,您应该使用对象的 ID 来识别它们是否处于活动状态,这会让您的生活更轻松:
当您尝试定义 类 时,您正在比较活动对象和您的元素的引用,因此很难有一个默认的活动对象,使用 ids(数字),您可以比较更容易获得价值。
这是一个使用 id 的重构:https://codesandbox.io/s/elegant-buck-z7ter?file=/src/App.js
你可以用useEffect()
useEffect(() => {
toggleActive(0);
}, []);
https://codesandbox.io/s/vigilant-hopper-4we6k?file=/src/App.js
我认为 useEffect 是正确的选择,您已经有了将 class 设置为活动的方法,您只需在 useEffect 挂钩中调用它,以便在组件首次呈现时调用它用你想要的参数。像这样:
useEffect(()=>{
//here we set the default class
toggleActive(0, buttons.objects[0].name)
}, [])