- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我向 buttonUrl 输入添加值时出现此错误。
组件正在将 url 类型的不受控制输入更改为受控制。输入元素不应从不受控制切换到受控(反之亦然)。在组件的生命周期内决定使用受控或非受控输入元素。
这是我的 block 的代码。
此外,我需要更改什么才能在我的 h3 副标题中获得跨度。
我已经研究了很多年了。干杯
( function ( blocks, editor, i18n, element, components, _ ) {
const __ = i18n.__;
const el = element.createElement;
const RichText = editor.RichText;
const MediaUpload = editor.MediaUpload;
const InspectorControls = editor.InspectorControls;
const PanelBody = components.PanelBody;
const TextControl = components.TextControl;
const SelectControl = components.SelectControl;
blocks.registerBlockType('unify/about-block', {
title: __('Unify About Block', 'unify'),
icon: 'align-left',
category: 'layout',
attributes: {
title: {
type: 'array',
source: 'children',
selector: 'h2',
},
subhead: {
type: 'array',
source: 'children',
selector: 'h3',
},
content: {
type: 'string'
},
mediaID: {
type: 'number',
default: 0
},
mediaURL: {
type: 'string',
source: 'attribute',
selector: 'img',
attribute: 'src',
},
buttonText: {
type: 'string',
default: ''
},
buttonUrl: {
type: 'url',
default: ''
},
blockColor: {
type: 'string',
default: 'brand-dark-blue'
},
},
edit: function ( props ) {
const attributes = props.attributes;
const onSelectImage = function ( media ) {
return props.setAttributes({
mediaURL: media.url,
mediaID: media.id,
});
};
return el(
'div',
{
className: props.className
},
el(
'div',
{ className: 'column block-content' },
el(
RichText,
{
tagName: 'h2',
inline: true,
placeholder: __('Title', 'unify'),
value: attributes.title,
onChange: function ( value ) {
props.setAttributes({ title : value });
},
}
),
el(
RichText,
{
tagName: 'h3',
inline: true,
placeholder: __('Subhead', 'unify'),
value: attributes.subhead,
onChange: function ( value ) {
props.setAttributes({ subhead : value });
},
}
),
el(
RichText,
{
tagName: 'p',
placeholder: i18n.__('Content', 'unify'),
value: attributes.content,
onChange: function ( value ) {
props.setAttributes({ content : value });
}
}
),
el(
'a',
{
className: 'components-button button button-large is-primary',
href: attributes.buttonURL
},
attributes.buttonText
)
),
el(
'div',
{
className: 'column block-image'
},
el(
MediaUpload,
{
onSelect: onSelectImage, allowedTypes: 'image', value: attributes.mediaID,
render: function ( obj ) {
return el(
components.Button,
{
className: attributes.mediaID ? 'image-button' : 'button button-large', onClick: obj.open
},
! attributes.mediaID ? __('Upload Image', 'unify') : el('img', { src: attributes.mediaURL })
);
},
}
)
),
el(
InspectorControls,
{
key: 'inspector'
},
el(
PanelBody,
{ title: i18n.__('Button Link'), className: 'block-button-link', initialOpen: true },
el(
TextControl,
{
type: 'url',
label: i18n.__('Enter the destination URL for the button'),
value: props.attributes.buttonURL,
onChange: function ( newButtonURL ) {
console.log(newButtonURL);
props.setAttributes({ buttonURL: newButtonURL });
}
}
),
el(
TextControl,
{
type: 'text',
label: i18n.__('Button Text', 'unify'),
value: attributes.buttonText,
onChange: function (newButtonText) {
props.setAttributes({ buttonText: newButtonText })
}
}
)
),
el(
PanelBody,
{ title: i18n.__('Color Settings'), className: 'block-color', initialOpen: false },
el(
SelectControl,
{
type: 'string',
label: i18n.__('Choose the highlight color for the block'),
value: attributes.blockColor ? attributes.blockColor : '',
options: [{
label: 'Dark Blue',
value: 'brand-dark-blue'
},{
label: 'Light Blue',
value: 'brand-blue'
},{
label: 'Green',
value: 'brand-green'
},{
label: 'Purple',
value: 'brand-purple'
}],
onChange: function ( value ) {
props.setAttributes({ blockColor : value });
},
}
),
),
)
)
},
save: function ( props ) {
const attributes = props.attributes;
return el(
'section',
{
className: 'about-block-section ' + attributes.blockColor
},
el(
'div',
{
className: 'grid-container'
},
el(
'div',
{
className: 'grid-x grid-padding-x align-center-middle'
},
el(
'div',
{
className: 'cell small-12 medium-6 large-6 small-order-2 medium-order-1 about-block-image-outer'
},
el(
'div',
{
className: 'about-block-image square-aspect-ratio'
},
attributes.mediaURL ? el(
'img',
{
src: attributes.mediaURL
}
) : ''
),
),
el(
'div',
{
className: 'cell small-12 medium-6 large-5 large-offset-1 small-order-2 medium-order-1 about-block-content-outer'
},
attributes.title ? el(
RichText.Content,
{
tagName: 'h2',
className: 'about-block-content-title',
value: attributes.title,
}
) : '',
attributes.subhead ? el(
RichText.Content,
{
tagName: 'h3',
className: 'about-block-content-subhead',
value: attributes.subhead,
}
) : '',
attributes.content ? el(
RichText.Content,
{
tagName: 'p',
className: 'about-block-content-body',
value: attributes.content
}
) : '',
attributes.buttonURL && attributes.buttonText ? el(
'a',
{
href: attributes.buttonURL,
className: 'button about-block-content-button'
},
attributes.buttonText,
el(
'i',
{ className: 'fas fa-arrow-right'}
)
) : ''
)
)
)
)
},
});
} )(
window.wp.blocks,
window.wp.blockEditor,
window.wp.i18n,
window.wp.element,
window.wp.components,
window._
);
最佳答案
这可能是在您解决此问题很久之后,但我相信它会对其他人有所帮助。该问题通常归因于组件的值最初被设置为 undefined
。参见 A component is changing an uncontrolled input of type text to be controlled error in ReactJS
从您的错误消息:
A component is changing an uncontrolled input of type url to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.
您有一个 URL 类型的组件 - TextControl
,传递给它的值是 value: props.attributes.buttonURL
基于此,我相信 buttonURL
在某些时候是 undefined
,这会导致该错误。要解决这个问题,请在 edit
中为 buttonURL
设置一个默认值。
edit: function ( props ) {
const attributes = props.attributes;
const buttonURL = props.attributes && props.attributes.buttonURL ?? props.attributes.buttonURL : '' // Decide on an appropriate default
const onSelectImage = function ( media ) {
return props.setAttributes({
mediaURL: media.url,
mediaID: media.id,
});
};
然后在TextControl
组件中使用——value: props.attributes.buttonURL
变成value: buttonURL
关于wordpress - 如何修复 Gutenberg block 错误 - 组件正在将不受控制的 url 类型输入更改为受控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63434695/
假设我拥有域 mydomain.com,并且我在服务器上有一个 Web 应用程序,网址为 http://99.99.99.99:1234/MyApplication/startpage.somethi
我正在尝试通过以下方式更新已解析的 URL: u, _ := url.Parse(s) if u.Scheme == "" { u.Scheme = "https" } if u.Path =
如何将 www.somesite.com/api(.*) 映射到 www.somesite.com/$1:9000? (我需要将/api 映射到运行 @ 端口 9000 的 Play 框架应用程序)
我有一个资源结构,如航类 > 座位 > 预订,所以预订属于某个航类的某个座位: http://example.com/jdf_3prGPS4/1/jMBDy46PbNc
我想知道以下网址是否有效。 路径中的点,在主机之后: http://www.example.com/v.b.w..com 主机中的点,作为子域的一部分: http://v.b.w..co.manufa
我有两个域 - crmpicco.co.uk 和 ayrshireminis.com - 如果我浏览到: www.crmpicco.co.uk/mini/new我希望能够重定向到 www.ayrshi
我正在尝试使用 URL 重写和应用程序请求路由来重写到外部 URL。我设置了以下规则: 在规则中,“patternToMatch”是我试
我已经安装了带有 SharePoint 和 Url Rewrite 模块的 IIS 7.0。 是以下句子还是我配置错误才能看到这个结果? Url Redirect 可以将 url 重定向到任何内部(在
我想知道,为了获得良好的 SEO,您必须在 URL 中使用自然语言。您知道字符中单词或短语的最大大小吗?例如: www.me.com/this-is-a-really-long-url.htm 我问这
有人知道在 SEO 友好 URL 中使用逗号有什么问题吗?我正在使用一些在其 SEO 友好 URL 中使用大量逗号的软件;但我 100% 肯定我见过一些程序/平台无法正确识别 URL 并在第一个逗号后
我有一个网站,我正在为所有链接使用干净的 URL。我想知道对于简短的基本 URL 与较长的描述性 URL 有何看法。 例如,如果我的网站是关于 Georgia Bulldog 足球新闻的,那么哪个网站
我正在编写一个类似于 tinyurl 的 URL 缩短器,我想知道如何跟踪已经使用我的服务缩短的 URL?例如,tinyurl 为相同的长 URL 生成相同的小 URL,而不管是谁创建的。如
我是 magento 的新手。我正在开发一个模块。为此,我有一些要显示链接的 css 和 js 文件。我目前有类似 的链接 getSkinUrl('module_tryouts/css/jquery.
我想基于 HTTP_URL 重写 URL 以重定向到不同的端口,同时保留其余的 URL 和查询字符串(如果指定)。例如, http://host/john/page.aspx 应该重定向到 http:
我遇到了以下问题: 我的 Grails (2.2.0) 应用程序具有以下 URL 映射: "/api/clientQuote/$labcode/$cliCode/$quoCode"(controlle
我有一个很长的 URL,它不适合 URL 字段。它一直在修剪。该怎么办?有没有办法增加 SharePoint 2010 中的 URL 字段字符限制? 或者解决方法来容纳长 URL。例如,以下 URL
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我们从客户以前的开发人员那里继承了相当多的 Google Apps 脚本项目。 Apps 脚本通过嵌入式小部件部署在 Google 网站 (sites.google.com) 的各个页面上。每当我们需
我正在编写一些文档,但遇到了一些词汇问题: http://www.example.com/en/public/img/logo.gif 被称为“绝对”网址,对吗? ../../public/img/l
我们从客户以前的开发人员那里继承了相当多的 Google Apps 脚本项目。 Apps 脚本通过嵌入式小部件部署在 Google 网站 (sites.google.com) 的各个页面上。每当我们需
我是一名优秀的程序员,十分优秀!