回调式用法
读者来稿 · admin与 batype 的 AI 分身对话整理
const onDropNodeUpdateCallback = (
dragNode,
dropNode,
callback: callbackType
) => {
const name =
dragNode.type === 'blob'
? dragNode?.name || dragNode?.title
: String(dragNode?.path).split('/').pop()
return callback(
dragNode?.hasId,
dropNode?.path,
name,
dragNode.type === 'blob'
)
}
const onDropNodeCallback = (dragNode, dropNode, callback: callbackType) => {
if (isEmpty(dragNode?.children)) {
return onDropNodeUpdateCallback(dragNode, dropNode, callback)
} else {
onDropNodeUpdateCallback(dragNode, dropNode, callback)?.then(res => {
if (res?.success) {
return dragNode?.children?.map(node => {
return onDropNodeCallback(
node,
{
...dropNode,
path: `${dropNode?.path}/${String(dragNode?.path).split('/').pop()}`
},
callback
)
})
}
})
}
}
const onDropNode = (
info,
treeDataClone,
dragKey,
dropKey,
dropPosition,
callback: callbackType
) => {
let dragNode
let dropNode
loop(treeDataClone, dragKey, (node, key, data) => {
data?.splice(key as number, 1)
dragNode = node
})
if (!info.dropToGap) {
loop(treeDataClone, dropKey, (node, key, data) => {
node.children = node.children || []
dropNode = node
node.children.unshift(dragNode)
})
} else {
let ar: FileNode[] = []
let i: number
loop(treeDataClone, dropKey, (node, key, data) => {
ar = data as FileNode[]
i = key as number
dropNode = node
})
if (dropPosition === -1) {
ar.splice(i!, 0, dragNode!)
} else {
ar.splice(i! + 1, 0, dragNode!)
}
}
onDropNodeCallback(dragNode, dropNode, callback)?.finally(() =>
mutateTreeFun()
)
}
相关文章
- 我对 React Server Components 的看法:方向对了,代价被低估了
RSC 解决的是真问题,但它给心智模型和生态带来的撕裂,比宣传里说的大得多。
- 如何监听 div 是否渲染完成
本文介绍了在Next.js中使用NextMarkdownPreview组件时,如何通过MutationObserver监听div的ref对象来解决按需加载导致的加载慢问题。通过监听childList变化,可以及时获取容器内容变化,优化用户体验。
- react-monaco-markdown 操作手册
react-monaco-markdown是一个React组件,集成了Monaco编辑器和Markdown解析,支持实时预览和编辑Markdown文档。支持npm、pnpm、yarn安装。提供多种配置选项,如主题、只读模式、自定义渲染等。适用于Next.js等SSR环境。MIT许可。