WordPress - 如何阻止 Gutenberg Block 触发多个 GET 请求?

Posted

技术标签:

【中文标题】WordPress - 如何阻止 Gutenberg Block 触发多个 GET 请求?【英文标题】:WordPress - How do I stop a Gutenberg Block from firing multiple GET Requests? 【发布时间】:2021-05-13 04:32:45 【问题描述】:

修好了!

我是如何解决的?

好吧,在查找了有关获取的所有文档和问题之后,我记得带有 function 和括号的按钮总是会触发。在我删除括号的那一刻,它停止了GET 请求的无限循环。

<button onclick=fetchingId>Chercher le produit</button>

现在,问题是它似乎不起作用并且该功能没有触发。 我目前正在尝试一些 Gutenberg 组件来帮助我触发该功能并按需获取 API。

编辑

有人让我注意到我应该传递函数而不是结果。

onclick 里面的函数应该是:

() => fetchingId(attributes.ids)

我用组件名称<Button>切换了html按钮:

<Button
    isPrimary
    className='fetch-product'
    onClick=() => fetchingId(attributes.ids)>
        Chercher un produit
</Button>

从 WordPress StackExchange 有人告诉我,我们不应该在 React 组件中使用函数,而应该使用 useEffect

The other thread with a solution.

原帖:

我一直在构建一个向 Woocommerce REST API 发送 GET 请求的 Gutenberg Block。

它由文本input 组成,该文本接收产品的 ID 并将其提取到 Woocommerce REST API。它还有一个button,它会触发一个函数来使用 API 获取产品。

GET 请求的问题

获取效果很好,但它会不断发送多个GET 请求,即使我没有单击按钮来触发该功能。当我每次更改 ID 时只需要一个请求时,只需单击输入即可发送多个请求。

代码

这是编辑功能的第一部分:

const edit = ( attributes, setAttributes ) => 

    const blockProps = useBlockProps();

    // Wrapped the WooCommerce.get() function in a function named `fetchingId` to call it with a button
    const fetchingId = async (id) => 
      // The WooCoommerce.get() function
      const response = await WooCommerce.get(`products/$id`)
        .then((response) => 
          console.log(response.data);
          setAttributes( price: response.data.price );
          setAttributes( name: response.data.name );
        )
        .catch((error) => 
          console.log(error.response.data);
          setAttributes( price: '' );
          setAttributes( name: '' );
        );
    

    ...

  

这是函数的另一部分:更新用于GET 请求的Product ID 的输入和链接到fetchingId() 函数的按钮。

return <div ...blockProps>
    <div class="wrapper-input" >
        <TextControl
          label=__('ID du Produit', 'ingredient-unique')
          value=attributes.id
          onChange=(val) => setAttributes( id: val )
          className='control-id'
        />
    </div>
    <button onclick=fetchingId(attributes.id)>Chercher le produit</button>

    ...
</div>;

【问题讨论】:

【参考方案1】:

修好了!

我是如何解决的?

好吧,在查找了有关获取的所有文档和问题之后,我记得带有带括号的函数的按钮总是会触发。在我删除括号的那一刻,它停止了GET 请求的无限循环。

&lt;button onclick=fetchingId&gt;Chercher le produit&lt;/button&gt;

现在,问题是它似乎不起作用并且该功能没有触发。我目前正在尝试一些 Gutenberg 组件来帮助我触发该功能并按需获取 API。 编辑

有人让我注意到我应该传递函数而不是结果。

onclick里面的函数应该是:

() =&gt; fetchingId(attributes.ids)

我用组件名称切换了 HTML 按钮:

<Button
    isPrimary
    className='fetch-product'
    onClick=() => fetchingId(attributes.ids)>
        Chercher un produit
</Button>

从 WordPress StackExchange 有人告诉我,我们不应该在 React 组件中使用函数,而是使用 useEffect

【讨论】:

以上是关于WordPress - 如何阻止 Gutenberg Block 触发多个 GET 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 wordpress 剥离或更改我的 html 代码,以便我可以在文本块中添加嵌入式 iframe?

Wordpress 阻止了我的主题的重要 API

如何阻止谷歌云 sql 损坏数据库表

ReCaptcha 正在阻止我在 Localhost 中的 Wordpress 登录访问

php WordPress阻止管理员删除

PHP 阻止WordPress样式表被缓存