javascript - 无法在 ReactJS 中完美地使用 CSS 中的位置
问题描述
我正在尝试制作一个递归反应树组件,用于显示在 MacOS 上作为 finder 存在的文件结构,类似这样。
这是我到目前为止所做的
我按照这篇文章构建了我的组件 -链接
这是显示文件名称和反应图标的代码
const getPaddingLeft = (level, type) => {
let paddingLeft = level*100;
return paddingLeft;
}
const getPaddingTop = (level, type) => {
let paddingLeft = -level*27.5;
return paddingLeft;
}
const StyledTreeNode = styled.div`
display: flex;
position: relative;
width: 100px;
flex-direction: row;
align-items: left;
padding: 5px 8px;
padding-left: ${props => getPaddingLeft(props.level, props.type)}px;
top: ${props => getPaddingTop(props.level, props.type)}px;
`;
const NodeIcon = styled.div`
font-size: 12px;
margin-right: ${props => props.marginRight ? props.marginRight : 5}px;
`;
const getNodeLabel = (node) => last(node.path.split('/'));
const TreeNode = (props) => {
const { node, getChildNodes, level, onToggle, onNodeSelect } = props;
return (
<React.Fragment>
<StyledTreeNode level={level} type={node.type}>
<NodeIcon onClick={() => onToggle(node)}>
{ node.type === 'folder' && (node.isOpen ? <FaChevronDown /> : <FaChevronRight />) }
</NodeIcon>
<NodeIcon marginRight={10}>
{ node.type === 'file' && <FaFile /> }
{ node.type === 'folder' && node.isOpen === true && <FaFolderOpen /> }
{ node.type === 'folder' && !node.isOpen && <FaFolder /> }
</NodeIcon>
<span role="button" onClick={() => onNodeSelect(node)}>
{ getNodeLabel(node) }
</span>
</StyledTreeNode>
{ node.isOpen && getChildNodes(node).map(childNode => (
<TreeNode
{...props}
node={childNode}
level={level + 1}
/>
))}
</React.Fragment>
);
}
TreeNode.defaultProps = {
level: 0,
};
在此,StyledTreeNode
如果我在 CSS 中放置,我将position: relative
无法单击箭头并让子文件在它们按照应有的方式打开后折叠回来。
但是,如果我删除position
,它变成
您可以看到子节点已下降到位,但现在我可以再次单击箭头,子文件会折叠回来。
我该如何解决这个问题,以便孩子的文件在单击箭头时折叠,并且孩子不会下降到与其父节点相对应的位置?
解决方案
推荐阅读
- javascript - 无法使用 Javascript 连接到 localhost Mosquitto Broker?
- java - 为什么我的公共变量显示为“'this' is not available”?
- swift - 如何在不知道名称的情况下访问 Firestore 字段值?
- php - 如何在使用 oAuth2 的第三方 API 中进行 Laravel 身份验证?
- javascript - Javascript 费用计算
- git - 如何更改git中的用户名?
- lua - 如何检查一个值是否不在 Lua 表中的任何位置?
- go - 我正在使用 Antlr4 创建一种语言,然后我想用它来生成 LLVM IR。我是否需要手写 LLVM IR 来响应我的访客事件?
- javascript - 脚本之间的 Google Chrome 消息 API 不起作用
- bash - 计算 bash 中的目录和文件