<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های f.zamanipour</title>
        <link>https://virgool.io/feed/@f.zamanipour</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-10 13:06:23</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/171781/avatar/PUGsdQ.jpeg?height=120&amp;width=120</url>
            <title>f.zamanipour</title>
            <link>https://virgool.io/@f.zamanipour</link>
        </image>

                    <item>
                <title>پیاده سازی جستجو در سایت به بهینه‌ترین شکل ممکن با Debouncing در react</title>
                <link>https://virgool.io/@f.zamanipour/%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D8%AF%D8%B1-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D9%87-%D8%A8%D9%87%DB%8C%D9%86%D9%87-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B4%DA%A9%D9%84-%D9%85%D9%85%DA%A9%D9%86-%D8%A8%D8%A7-debouncing-%D8%AF%D8%B1-react-eilm8ba5zwaq</link>
                <description>اگه شماهم مثل من از عملیات سرچ در پروژه هاتون زیاد استفاده میکنید، حتما متوجه شدید که با تایپ کردن هر حرف در اینپوت، یکبار api رو صدامیزنید و این اصلا بهینه نیست. توی این مقاله با یک مثال ساده، این مشکل رو حل میکنیم.خب مسئله مشخص شد؛ اما راه حل چیه؟ همونطور که از عنوان مقاله مشخصه، راه حل Debouncing  هست.اما debouncing چه کاری انجام میده؟ debouncing درواقع زمان اجرا شدن یک فانکشن رو به تاخیر میندازه و اینکاررو با استفاده از setTimeOut و Closures انجام میده.کد زیر رو در نظر بگیرید  که یک جست و جو رو بصورت ساده انجام میده:function App() {
  let [data, setData] = useState([]);
  const myOnChange = async (e) =&gt; {  
  let queryString = e.target.value;  
  let data = await makeAPICall(queryString);  
  setData(data);
}
return &lt;&gt;&lt;input type=&amp;quottext&amp;quot ={myOnChange}&gt;&lt;/input&gt;&lt;/&gt;
}
حالا خیلی ساده با اضافه کردن setTimeOut  میتونیم یک فاصله زمانی به تایپ کردن کاربر و صدازده شدن api اضافه کنیم:function debouncer() {
 let timeout = null;
 return function debounced() {
   const onComplete = () =&gt; {
     timeout = null;
   }   if (timeout) {
     clearTimeout(timeout);
   }   timeout = setTimeout&#40;onComplete, 3000&#41;;
 };
}
function App() {  
let [data, setData] = useState([]); 
 const myOnChange = async (e) =&gt; {
    let queryString = e.target.value;
    let data = await makeAPICall(queryString);
    setData(data);
  }  const debouncedOnChange = debouncer(myOnChange, 1000);
  return &lt;&gt;&lt;input type=&amp;quottext&amp;quot ={debouncedOnChange}&gt;&lt;/input&gt;    &lt;/&gt;
}امیدوارم لذت برده باشید.</description>
                <category>f.zamanipour</category>
                <author>f.zamanipour</author>
                <pubDate>Sat, 04 Dec 2021 21:26:52 +0330</pubDate>
            </item>
            </channel>
</rss>