首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在同一个块中多次添加InnerBlock

如何在同一个块中多次添加InnerBlock
EN

WordPress Development用户
提问于 2021-11-23 10:23:09
回答 1查看 823关注 0票数 1

当我点击一个按钮来添加一个新的选项卡时,我希望有一个<InnerBlock />,这样我就可以在选项卡中添加其他块。尝试此操作不起作用,因为在所有动态创建的选项卡中似乎都是如此。

代码语言:javascript
运行
AI代码解释
复制
import "./index.css";
import { registerBlockType } from "@wordpress/blocks";
import { useState } from "react";
import {
  RichText,
  InnerBlocks,
} from "@wordpress/block-editor";
import { Button } from "@wordpress/components";
const __ = wp.i18n.__;

registerBlockType("custom/tabs", {
  title: __("Tabbed Blocks", "custom-blocks"),
  description: __("Tabbed content blocks", "custom-blocks"),
  icon: "smiley",
  category: "custom-category",
  keywords: [__("tabs", "custom-blocks"), __("repeat", "custom-blocks")],
  attributes: {
    tabs: {
      type: "array",
      default: [""],
    },
  },

  edit: (props) => {
    const {
      attributes: { tabs },
      setAttributes,
    } = props;

    const [currentTab, setCurrentTab] = useState(0);

    const onTabClick = (index) => {
      setCurrentTab(index);
    };

    return (
      <>
        <div className="simple-tabs">
          <div className="tabs">
            {tabs.map((tab, index) => (
              <RichText
                tagName="button"
                value={tab}
                className={currentTab == index ? `active` : ""}
                onChange={(newValue) => {
                  const newTabs = tabs.concat([]);
                  newTabs[index] = newValue;
                  setAttributes({ tabs: newTabs });
                }}
                onClick={() => onTabClick(index)}
              />
            ))}
          </div>

          {tabs.map((tab, index) => {
            if (index == currentTab) {
              //return <div>Tab content {index}</div>;
              return <InnerBlocks />;
            }
          })}
        </div>
        <Button
          isPrimary
          onClick={() => {
            setAttributes({ tabs: tabs.concat([""]) });
          }}
        >
          Add Tab
        </Button>
      </>
    );
  },
  save: (props) => {
   return <InnerBlocks.Content />;
  },
});

期望输出

EN

回答 1

WordPress Development用户

回答已采纳

发布于 2021-11-23 11:13:46

你不

这不是块的工作方式,也不是HTML的工作方式。如果要插入块的多个区域,则需要多个块。

这就好比说一个盒子有多个内部,或者有一个以上的“在HTML标签中”,作为一个概念是没有意义的。

相反,要做官方核心模块所做的事情。例如列。

  • 列块
      • 段落
      • 段落

代码语言:javascript
运行
AI代码解释
复制
- column 
    - paragraph
    - paragraph

列块只能包含单独的列块,包含内容的是单个列块。

选项卡的工作原理是一样的:

  • 制表符
    • 选项卡
      • 段落
      • 段落

代码语言:javascript
运行
AI代码解释
复制
- tab 
    - paragraph
    - paragraph

还请注意,您所要求的也不可能在不意外地想出完全相同的解决方案的情况下用要点表示。

HTML标记也是如此,如果我想要一个带有两个内部空间的<div>容器,我必须在其中放置两个标记作为单独的空间。为什么街区会有任何不同。

注意,块appender只是默认的UI,没有什么可以阻止您将自定义的appender组件传递到内部块UI,甚至可以将一个组件构建到块本身中。

下面是直接从readme获取的InnerBlocks components appender属性doc的示例:

代码语言:javascript
运行
AI代码解释
复制
// Utilise a predefined component
<InnerBlocks
    renderAppender={ InnerBlocks.ButtonBlockAppender }
/>

// Don't display an appender
<InnerBlocks
    renderAppender={ false }
/>

// Fully custom
<InnerBlocks
    renderAppender={ MyAmazingAppender }
/>

下面是一个附录组件:

代码语言:javascript
运行
AI代码解释
复制
function render( { clientId } ) {
    return (
        <div>
            <p>Some rendered content here</p>
            <ButtonBlockAppender rootClientId={ clientId } />
        </div>
    );
}

https://github.com/WordPress/gutenberg/tree/trunk/packages/block-editor/src/components/button-block-appender

下面是选项卡如何从最终的GB加载项中阻止它:

代码语言:javascript
运行
AI代码解释
复制
        const { insertBlock } = !wp.blockEditor ? dispatch( 'core/editor' ) : dispatch( 'core/block-editor' );
        const tabItemBlock = createBlock('uagb/tabs-child');

        insertBlock(tabItemBlock, attributes.tabHeaders.length, clientId);

在这里,他们使用uaggb/tabs块来提供UI并包含选项卡,使用uaggb/tabs-child块来包含每个选项卡的内容,并提供选项卡特定的属性。

有用的链接:

票数 2
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/398451

复制
相关文章
谈SaaS下如何迅速部署应用软件
如今,许多公司借助软件即服务(Software as a Service,SaaS)来迅速部署软件,只需要较少的前期投资和极少的IT人员资源。使用按需模式(on-demand model)的应用软件越来越多,他们正在充分加以利用。
全栈程序员站长
2022/07/04
1.2K0
Netty 在 Dubbo 中是如何应用的?
众所周知,国内知名框架 Dubbo 底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天我们就来一探究竟。
Java技术栈
2019/11/29
9510
Netty 在 Dubbo 中是如何应用的?
众所周知,国内知名框架 Dubbo 底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天我们就来一探究竟。
IT大咖说
2020/02/26
2.2K0
应用软件开发的工程化
应用软件的功能需求、非功能需求和工程化问题是应用软件开发中不可或缺的部分。功能需求是软件必须实现的功能,非功能需求是软件必须满足的属性,工程化问题是软件开发过程中遇到的技术问题。
行者深蓝
2023/11/09
5850
相似的像素保持在同一组中的梯度的函数的应用。
Week_05_Lec_03_Code.m I = imread('circuit.tif'); rotI = imrotate(I, 33, 'crop'); BW = edge(rotI, 'canny'); [H, T, R] = hough(BW); imshow(H, [], 'XData', T, 'YData', R, 'InitialMagnification', 'fit'); xlabel('\theta'), ylabel('\rho'); axis on, axis normal,
裴来凡
2022/05/28
6130
相似的像素保持在同一组中的梯度的函数的应用。
在seaborn中设置和选择颜色梯度
seaborn在matplotlib的基础上进行开发,当然也继承了matplotlib的颜色梯度设置, 同时也自定义了一系列独特的颜色梯度。在seaborn中,通过color_palette函数来设置颜色, 用法如下
生信修炼手册
2020/11/02
3.9K0
在seaborn中设置和选择颜色梯度
应用软件开发的工程化-Go
在 Linux(Ubuntu/Fedora)和 MacOS 下的 Go 开发环境设置步骤如下:
行者深蓝
2023/11/18
2560
应用软件开发的工程化-JavaScript
在 Linux(Ubuntu/Fedora)和 MacOS 下的 JavaScript 开发环境设置步骤:
行者深蓝
2023/11/18
2840
新型应用软件型NAS方案Infortress
Infortress是应用软件型NAS解决方案,官方网站为 https://hardstones.com 用户只需要在自己的电脑上安装一个应用软件就能给自己的电脑增加NAS功能,不影响电脑正常使用的同时还能帮助用户将手机相册,通讯录备份到自己的电脑上,并能像访问网盘一样远程访问。除了备份这个核心功能,它还支持密码和笔记管理。它还有一些特色功能,如隐身模式,用户无需注册就能使用。还支持访问用户电脑硬盘上的所有文件,可以一定程度上满足远程办公(远程获取办公和学习文档)的需求。它的端口穿透功能够用其自带的内网穿透服务将电脑上的TCP服务开放到互联网访问,帮助用户实现远程RDP等,开发者可以用这个功能将内网电脑上的HTTP服务开放到互联网访问。更牛的是,它还支持双活双备,2台电脑同时备份,保持同步。
用户11460993
2025/01/25
3050
新型应用软件型NAS方案Infortress
Linux Mint 17下LibreOffice应用软件的使用
Linux Mint中默认安装了一部分应用软件,方便用户使用。本章节中先说Mint中默认安装的办公软件:LibreOffice。
用户8704835
2021/06/08
5K0
腾讯云微搭低代码平台如何连接其他应用/软件?
腾讯云微搭低代码是一个低代码开发平台,用户可通过拖拽式开发去搭建 PC Web、H5 和小程序应用,轻松高效的搭建自己需要的应用。 腾讯微搭支持打通企业内部数据,轻松实现企业微信管理、消息推送、用户权限等能力,实现企业内部系统管理。
阿那个沫
2022/11/03
2.3K0
腾讯云微搭低代码平台如何连接其他应用/软件?
应用软件开发的工程化-Python
在 Linux(Ubuntu/Fedora)和 MacOS 下的 Python 开发环境设置步骤
行者深蓝
2023/11/18
2860
Netty-在-Dubbo-中如何应用
链接:http://thinkinjava.cn/2018/03/%E7%9C%8B-Netty-%E5%9C%A8-Dubbo-%E4%B8%AD%E5%A6%82%E4%BD%95%E5%BA%94%E7%94%A8/
用户5224393
2019/08/13
1.2K0
Netty-在-Dubbo-中如何应用
理解梯度下降在机器学习模型优化中的应用
本文介绍了梯度下降算法的起源、批量梯度下降、随机梯度下降和小批量梯度下降,以及它们在机器学习中的重要性。通过这些算法,可以优化模型权系数,从而提高模型的性能。
chaibubble
2018/01/02
1.8K0
理解梯度下降在机器学习模型优化中的应用
让数据先“活”起来,如何实现数据在企业中的最大价值
📷数据是一种宝贵的资源,知道数据十分宝贵的人很多但如何运用数据让其发生效用的人并不多,今天借着机会,和唐建法老师请教关于数据如何发生效用的事情,让数据也能为企业带来效益,同时作为一个数据库架构师、DBA,我也想听到更新、更有价值的知识,数据到底是什么、Data as service 数据即服务 、数据流转的最终目的是什么,我想寻求真实的答案。
AustinDatabases
2025/03/24
1240
让数据先“活”起来,如何实现数据在企业中的最大价值
应用软件开发的工程化-Rust
在 Linux(Ubuntu/Fedora)和 MacOS 下的Rust 开发环境设置步骤:
行者深蓝
2023/11/18
4090
应用软件开发的工程化-C 语言
C 语言在 Linux(Ubuntu/Fedora)和 MacOS 下的开发环境设置步骤:
行者深蓝
2023/11/18
2570
梯度是如何计算的
引言 深度学习模型的训练本质上是一个优化问题,而常采用的优化算法是梯度下降法(SGD)。对于SGD算法,最重要的就是如何计算梯度。此时,估计跟多人会告诉你:采用BP(backpropagation)算
机器学习算法工程师
2018/03/06
2.6K0
梯度是如何计算的
在SaaS应用中,AI的“雪球”如何越滚越大?
从Shopify可防止欺诈的机器学习到Salesforce的Einstein,在过去的数年间,SaaS巨头们或投入巨资以进行AI的开发,或收购AI创业公司,以试图率先在竞争中取得优势。 借助于云计算,
BestSDK
2018/03/02
1K0
在SaaS应用中,AI的“雪球”如何越滚越大?
脑组织中的梯度
近年来,研究脑组织空间变化或梯度的新方法和应用兴起,补充了在识别和绘制离散脑区和宏观功能社区方面取得的进展。在人类和非人灵长类动物死后细胞结构的早期分析中已经强调了这一点,最近的神经影像学和网络神经科学研究在绘制人类和非人类大脑的空间梯度方面取得了重大进展。
悦影科技
2022/06/20
5660

相似问题

在rails中生成自动递增号

13

如何自动递增票据号

20

如何在“组按”查询中使用自动递增号生成假列

25

CQ中自动递增唯一号生成策略

40

生成帐户号递增1

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档