如果在 save props > return 字段中声明?
if statement in the save props > return field?
是否可以在 return() 中从 react 中的 save props 中编写一个 if 语句?
因为写if语句的时候只看到前端的代码
因此发生了以下情况:
我创建了一个 Selectcontrol:
<SelectControl
label={ __( 'Press ctrl to multiple stars:' ) }
value={ testimonial.selectcontrol } // e.g: value = [ 'a', 'c' ]
onChange={ (value) => handleTestimonialChange('selectcontrol', value, index ) }
options={ [
{ value: null, label: 'Select a Star', disabled: false },
{ value: 'star' , label: 'Add 1 star' },
{ value: 'star2', label: 'Add 2 stars' },
{ value: 'star3', label: 'Add 3 stars' },
{ value: 'star4', label: 'Add 4 stars' },
{ value: 'star5', label: 'Add 5 stars' },
] }
/>
我用下面的代码渲染它,让后端有星星:
selectcontrolDisplay = props.attributes.testimonial.map( ( testimonial, index ) => {
if (testimonial.selectcontrol == 'star') {
return (testimonial.selectcontrol == 'star') ? <span><i className="fas fa-star checked"></i></span> : testimonial.selectcontrol;
} else if (testimonial.selectcontrol == 'star2') {
return (testimonial.selectcontrol == 'star2') ? <span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span> : testimonial.selectcontrol;
} else if (testimonial.selectcontrol == 'star3') {
return (testimonial.selectcontrol == 'star3') ? <span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span> : testimonial.selectcontrol;
} else if (testimonial.selectcontrol == 'star4') {
return (testimonial.selectcontrol == 'star4') ? <span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>: testimonial.selectcontrol;
} else if (testimonial.selectcontrol == 'star5') {
return (testimonial.selectcontrol == 'star5') ? <span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span> : testimonial.selectcontrol;
}
} );
在编辑器部分我有以下部分:
{selectcontrolDisplay && selectcontrolDisplay.map((selectcontrolValue, i) =>
<div className="wp-block-cgb-block-project-drie-testimonial-ratings">
<div className="wp-block-cgb-block-project-drie-testimonial-rating">
<h2>Rating</h2>
{selectcontrolValue}
</div>
</div>
)}
所以上面的工作正常,但对我来说最难的部分是在前端获取结果。
所以我想我可以让它与 if 语句一起工作。但我只看到前端的代码,而不是只有星星的结果。有人可以给我建议如何使这项工作吗?
save: ( props ) => {
const {attributes: { selectcontrol } } = props;
return (
html code.....
if (selectcontrol == 'star') {
<span><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star2') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star3') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star4') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star5') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
}
)
}
为了更好地了解:
save: ( props ) => {
const {attributes: { title } } = props;
const {attributes: { subtitle } } = props;
const {attributes: { media} } = props;
const {attributes: { testimonial } } = props;
const {attributes: { selectcontrol } } = props;
return (
<section className="testimonial">
<Helmet>
<script type="text/javascript" src="//cdn.jsdelivr.net/gh/kenwheeler/slick@1.8.1/slick/slick.min.js"></script>
</Helmet>
<div className="container testimonial__container">
<div className="row testimonial__row">
<div className="testimonial__info">
<div className="testimonial__subtext">
<span>{ subtitle }</span>
</div>
<div className="testimonial__title">
<h2>{ title }</h2>
</div>
</div>
<div className="items testimonial__testimonials">
{testimonial.map((field, i) => (
<div className="testimonial__testimonial">
<div className="testimonial__card" key={ i }>
<div className="testimonial__image">
<img src={field.media.url} />
</div>
<div className="testimonial__review">
<p>{field.testimonial}</p>
</div>
if (selectcontrol == 'star') {
<span><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star2') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star3') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star4') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star5') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
}
<div className="testimonial__stars">
<span>{testimonial.selectcontrol}</span>
</div>
<div className="testimonial__author">
<div className="testimonial__name">
<span>{ field.author }</span>
</div>
<div className="testimonial__function">
<span>{ field.position }</span>
</div>
</div>
</div>
</div>
))}
</div>
</div>
</div>
</section>
);
},
查看您的代码,您已经非常努力地使用 if/if else
语句来获得正确的标记来保存您的星星。您可以有 conditional rendering 语句,但是对于您 code/objective 为星星保存正确的标记,我可以建议另一种方法..
在编辑器中,您有一个 <SelectControl/>
用于设置“星级”,因此我们要在块属性中保存星级的 值 .因此,假设我们已经在块属性中定义了“starRating”,例如:
block.json
{
...
"attributes": {
"starRating": {
"type": "string",
"default": "1"
}
}
}
我已将默认值设置为 1,因此 <SelectControl/>
[ 上不需要空选项=25=]
在您的 Edit()
函数中有很多事情可以渲染您漂亮的星形图标,因此我将重点关注 <SelectControl/>
中所需的最低限度。通过使用数字,我们现在可以使用地图并轻松生成所需的选项标签和值:
edit.js
import { __ } from '@wordpress/i18n';
import { useBlockProps } from '@wordpress/block-editor';
import { SelectControl } from '@wordpress/components';
export default function Edit({ attributes, setAttributes }) {
const { starRating } = attributes;
const STARS = [1, 2, 3, 4, 5];
return (
<div {...useBlockProps()}>
<SelectControl
label={__('Set Star Rating')}
value={starRating}
options={STARS.map((number) => {
let label = '*'.repeat(number); // simple trick for number of stars
return {
label: label,
value: number
}
})}
onChange={(value) => setAttributes({ starRating: value })} />
</div>
);
}
接下来,在 save()
中,可以使用“starRating”的保存值生成正确的标记,同时避免 if
if/else
语句:
save.js
import { useBlockProps } from '@wordpress/block-editor';
export default function save({ attributes }) {
const { starRating } = attributes;
return (
<div {...useBlockProps.save()}>
<span>
{[...Array(parseInt(starRating))].map((item, index) =>
<i key={index} className="fas fa-star checked"></i>
)}
</span>
</div>
);
}
注意:react 需要“key”——它不会出现在保存的内容或前端中。
建议:鉴于您块中的所有内容,您可能很快就会发现管理 edit()
和 save()
一致性具有挑战性。尝试专注于您的块所做的特定功能,在您的情况下是“星级”。对于所有其他部分,例如推荐标题、推荐潜台词等,我建议创建一个 reusable block or block/post template 以便您将来可以轻松更改 layout/formatting/order 或 block/class 名称。 Updating/migrating 如果您需要更改保存的内容,块可能会非常具有挑战性 - 如果您可以避免这样做,将来您会感谢您!
是否可以在 return() 中从 react 中的 save props 中编写一个 if 语句?
因为写if语句的时候只看到前端的代码
因此发生了以下情况:
我创建了一个 Selectcontrol:
<SelectControl
label={ __( 'Press ctrl to multiple stars:' ) }
value={ testimonial.selectcontrol } // e.g: value = [ 'a', 'c' ]
onChange={ (value) => handleTestimonialChange('selectcontrol', value, index ) }
options={ [
{ value: null, label: 'Select a Star', disabled: false },
{ value: 'star' , label: 'Add 1 star' },
{ value: 'star2', label: 'Add 2 stars' },
{ value: 'star3', label: 'Add 3 stars' },
{ value: 'star4', label: 'Add 4 stars' },
{ value: 'star5', label: 'Add 5 stars' },
] }
/>
我用下面的代码渲染它,让后端有星星:
selectcontrolDisplay = props.attributes.testimonial.map( ( testimonial, index ) => {
if (testimonial.selectcontrol == 'star') {
return (testimonial.selectcontrol == 'star') ? <span><i className="fas fa-star checked"></i></span> : testimonial.selectcontrol;
} else if (testimonial.selectcontrol == 'star2') {
return (testimonial.selectcontrol == 'star2') ? <span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span> : testimonial.selectcontrol;
} else if (testimonial.selectcontrol == 'star3') {
return (testimonial.selectcontrol == 'star3') ? <span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span> : testimonial.selectcontrol;
} else if (testimonial.selectcontrol == 'star4') {
return (testimonial.selectcontrol == 'star4') ? <span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>: testimonial.selectcontrol;
} else if (testimonial.selectcontrol == 'star5') {
return (testimonial.selectcontrol == 'star5') ? <span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span> : testimonial.selectcontrol;
}
} );
在编辑器部分我有以下部分:
{selectcontrolDisplay && selectcontrolDisplay.map((selectcontrolValue, i) =>
<div className="wp-block-cgb-block-project-drie-testimonial-ratings">
<div className="wp-block-cgb-block-project-drie-testimonial-rating">
<h2>Rating</h2>
{selectcontrolValue}
</div>
</div>
)}
所以上面的工作正常,但对我来说最难的部分是在前端获取结果。
所以我想我可以让它与 if 语句一起工作。但我只看到前端的代码,而不是只有星星的结果。有人可以给我建议如何使这项工作吗?
save: ( props ) => {
const {attributes: { selectcontrol } } = props;
return (
html code.....
if (selectcontrol == 'star') {
<span><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star2') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star3') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star4') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star5') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
}
)
}
为了更好地了解:
save: ( props ) => {
const {attributes: { title } } = props;
const {attributes: { subtitle } } = props;
const {attributes: { media} } = props;
const {attributes: { testimonial } } = props;
const {attributes: { selectcontrol } } = props;
return (
<section className="testimonial">
<Helmet>
<script type="text/javascript" src="//cdn.jsdelivr.net/gh/kenwheeler/slick@1.8.1/slick/slick.min.js"></script>
</Helmet>
<div className="container testimonial__container">
<div className="row testimonial__row">
<div className="testimonial__info">
<div className="testimonial__subtext">
<span>{ subtitle }</span>
</div>
<div className="testimonial__title">
<h2>{ title }</h2>
</div>
</div>
<div className="items testimonial__testimonials">
{testimonial.map((field, i) => (
<div className="testimonial__testimonial">
<div className="testimonial__card" key={ i }>
<div className="testimonial__image">
<img src={field.media.url} />
</div>
<div className="testimonial__review">
<p>{field.testimonial}</p>
</div>
if (selectcontrol == 'star') {
<span><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star2') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star3') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star4') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
} else if (selectcontrol == 'star5') {
<span><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i><i className="fas fa-star checked"></i></span>
}
<div className="testimonial__stars">
<span>{testimonial.selectcontrol}</span>
</div>
<div className="testimonial__author">
<div className="testimonial__name">
<span>{ field.author }</span>
</div>
<div className="testimonial__function">
<span>{ field.position }</span>
</div>
</div>
</div>
</div>
))}
</div>
</div>
</div>
</section>
);
},
查看您的代码,您已经非常努力地使用 if/if else
语句来获得正确的标记来保存您的星星。您可以有 conditional rendering 语句,但是对于您 code/objective 为星星保存正确的标记,我可以建议另一种方法..
在编辑器中,您有一个 <SelectControl/>
用于设置“星级”,因此我们要在块属性中保存星级的 值 .因此,假设我们已经在块属性中定义了“starRating”,例如:
block.json
{
...
"attributes": {
"starRating": {
"type": "string",
"default": "1"
}
}
}
我已将默认值设置为 1,因此 <SelectControl/>
[ 上不需要空选项=25=]
在您的 Edit()
函数中有很多事情可以渲染您漂亮的星形图标,因此我将重点关注 <SelectControl/>
中所需的最低限度。通过使用数字,我们现在可以使用地图并轻松生成所需的选项标签和值:
edit.js
import { __ } from '@wordpress/i18n';
import { useBlockProps } from '@wordpress/block-editor';
import { SelectControl } from '@wordpress/components';
export default function Edit({ attributes, setAttributes }) {
const { starRating } = attributes;
const STARS = [1, 2, 3, 4, 5];
return (
<div {...useBlockProps()}>
<SelectControl
label={__('Set Star Rating')}
value={starRating}
options={STARS.map((number) => {
let label = '*'.repeat(number); // simple trick for number of stars
return {
label: label,
value: number
}
})}
onChange={(value) => setAttributes({ starRating: value })} />
</div>
);
}
接下来,在 save()
中,可以使用“starRating”的保存值生成正确的标记,同时避免 if
if/else
语句:
save.js
import { useBlockProps } from '@wordpress/block-editor';
export default function save({ attributes }) {
const { starRating } = attributes;
return (
<div {...useBlockProps.save()}>
<span>
{[...Array(parseInt(starRating))].map((item, index) =>
<i key={index} className="fas fa-star checked"></i>
)}
</span>
</div>
);
}
注意:react 需要“key”——它不会出现在保存的内容或前端中。
建议:鉴于您块中的所有内容,您可能很快就会发现管理 edit()
和 save()
一致性具有挑战性。尝试专注于您的块所做的特定功能,在您的情况下是“星级”。对于所有其他部分,例如推荐标题、推荐潜台词等,我建议创建一个 reusable block or block/post template 以便您将来可以轻松更改 layout/formatting/order 或 block/class 名称。 Updating/migrating 如果您需要更改保存的内容,块可能会非常具有挑战性 - 如果您可以避免这样做,将来您会感谢您!