想要实现 点击每个项的设置,展示对应的设置框。
设置框的展示与否设置了通过show
属性来判断
<div className={i.show ? 'menu-show' : 'menu-hide'}>
<p>名称: {i.name}</p>
<p>年龄: <input type="text"/></p>
</div>
点击 box 框时 也设置了 <div key={i.name} className="box" onClick={() => i.show = !i.show}>
可为什么没效果呢? 下面是 demo 代码。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<style>
* {
padding: 0;
margin: 0;
}
.wrapper, h1 {
display: flex;
margin: auto 220px;
}
.box {
font-size: 16px;
background-color: #00a0e9;
margin: 3px;
border-radius: 3px;
padding: 3px;
}
.menu-hide, .menu-show {
margin-top: 12px;
}
.menu-hide {
display: none;
}
.menu-show {
display: block;
}
</style>
</head>
<body>
<div id="root"></div>
</body>
<script type="text/babel">
const App = () => {
const [items, setItems] = React.useState([{name: 'twitch', age: 3}, {name: '虎牙', age: 5}, {name: '斗鱼', age: 6}])
return <div>
<h1>study</h1>
<div className="wrapper">
{items.map(i => {
i.show = false
return <div key={i.name} className="box" onClick={() => i.show = !i.show}>
<p>名称 {i.name}</p>
<p>年龄: {i.age}</p>
<a href="#">设置</a>
<div className={i.show ? 'menu-show' : 'menu-hide'}>
<p>名称: {i.name}</p>
<p>年龄: <input type="text"/></p>
</div>
</div>
})}
</div>
</div>
}
ReactDOM.createRoot(document.getElementById('root')).render(<App/>)
</script>
</html>
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.