iT邦幫忙

0

React 的使用問題?

  • 分享至 

  • xImage

有一個array我根據array內容渲染出一連串的li
並且將最後一個li的顏色設成紅色
當點擊某個li時需要將其他li的元素改成黑色,點到的這個li改成紅色

但是當array內容又更動時原本被點過變成紅色的li要變回黑色
所以當點擊和渲染列表時永遠只會有一個li可以處在紅色的狀態

想問的是

假設點擊時我要把其他li變成黑色,自身變成紅色
我能不能再onClick()當中取所有的li直接改成黑色
然後e.target改成紅色
直接用js操作Dom這樣的作法是正確的嗎??

另外如果有array有新的內容加入時雖然會自動產出列表
舊的li的上舊有的style並不會被重製
那要如何讓每一次渲染時都保持初始的狀態呢?

其實我想的是如果用react是不是應該盡量遵從大家平常在用這個框架時常用的做法?
比方說某個功能在react中可能適合這樣子寫,但可能我並不知道可以這樣做


function Item(props) {
  const itemStyle = {};
  itemStyle.color = props.active === true ? "red" : "black";
  return (
    <li
      style={itemStyle}
      key={props.value}
      onClick={(e) => {
        e.target.style.color = "red";
      }}
    >
      {props.content}
    </li>
  );
}
function renderItems(list) {
  let Items = [];
  for (let i = 0; i < list.length; i++) {
    if (i === list.length - 1) {
      Items.push(<Item key={i} value={i} content={list[i]} active={true} />);
    } else {
      Items.push(<Item key={i} value={i} content={list[i]} />);
    }
  }
  return Items;
}

好像可以喔 你試試看 如果有問題應該就是 要用 useRef
但你如果要跟其他 react state 互動的話 會出現bug 因為這樣寫不會觸發 react的更新機制
https://juejin.cn/post/6844903969504886791#heading-3
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
iT邦新手 2 級 ‧ 2022-02-28 10:57:47

itemStyle, active 等等部分,
以我了解的 React ,我會建議都用 setState 的方式。

使用 hook 的話,就是 useState

我要發表回答

立即登入回答