javascript - 如果React中的id为true,如何添加类?

标签 javascript reactjs

我有一个列表如下:

<div id="123" className="panel"></div>
<div id="456" className="panel"></div>
<div id="789" className="panel"></div>
<div id="101" className="panel"></div>

因此,如果 id 等于 true,则添加类 open,如果为 false,则删除 open。

这在 react 中是否可能,我尝试过使用 ref 但没有成功。

最佳答案

React 会根据您渲染的内容对 DOM 进行必要的更改,因此不要考虑在状态更改时添加和删除 classNames,而是考虑渲染方法的输出如何变化。

例如如果您有一些 selectedId 状态代表当前选定的 id:

render() {
  let {selectedId} = this.state
  return <div>
    <div id="123" className={'panel' + (selectedId === '123' ? ' open' : '')}>...</div>
    <div id="456" className={'panel' + (selectedId === '456' ? ' open' : '')}>...</div>
    ...
  </div>
}

如果您手动渲染这些内容而不是基于事物列表,那么重复起来会很乏味,因此您可以将一些实现细节分解到另一个组件中:

function Panel({children, id, open}) {
  let className = 'panel'
  if (open) className += ' open'
  return <div id={id} className={className}>{children}</div>
}

render() {
  let {selectedId} = this.state
  return <div>
    <Panel id="123" open={selectedId === '123'}>...</Panel>
    <Panel id="456" open={selectedId === '456'}>...</Panel>
    ...
  </div>
}

关于javascript - 如果React中的id为true,如何添加类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44177990/

相关文章:

javascript - 如何使用事件处理程序连续循环遍历数组列表(从末尾恢复到开头)

javascript - 我的 d3 折线图中的画笔功能未按预期工作

node.js - 无法使用 Multer、React、Node.js、Sequelize、PostgreSQL 访问上传的照片

javascript - jQuery 如果 url 哈希,单击事件/激活 javascript

JavaScript 快速排序

javascript - HTML5 canvas 二维上下文中的多个图像模式?

javascript - 路径通配符不适用于 system.js

javascript - React/ESLint - JSX 属性不应该使用箭头函数

javascript - 数组中的值不相加

javascript - 在 es6 中将 props 传递给子组件