اذهب إلى المحتوى

السؤال

نشر

أحاول أن أقوم بتغير الحالة الخاصة بمكون react عند  الضغط على زر معين لتصبح true بدلًا من false أو العكس ولكن يظهر لي الخطأ التالي:

اقتباس

Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.

فهمت من الخطأ أنه تم تغير حالة المكون عدد كبير من المرات، وللحفاظ على أداء الصفحة يظهر هذا الخطأ، لكن المشكلة أن هذا الخطأ يظهر بدون أن أضغط على الزر حتى.

هذا الكود الذي أستعمله:

import React, { Component } from 'react';

class Row extends React.Component {
    constructor(props) {
        super(props);     
        this.toggle= this.toggle.bind(this);
        this.state = {
            details: false
        } 
    }  
    toggle(){
        this.setState({ details: !this.state.details }); 
    }

    render() {
        return (
            <div> 
                <span className={this.state.details ? "block" : "hidden"}>Some Content</span>
                {<div className="btn btn-lg" onClick={this.toggle()}>Toggle</div>}
            </div>
    )}
}

export default Row;

 

Recommended Posts

  • 1
نشر

يحدث هذا الخطأ لأنك تقوم بإستدعاء التابع toggle داخل التابع render وهذا يسبب أن يقوم react بعمل re-render المكون والحل هو تغير الجزء الخاص بإستدعاء التابع toggle ليصبح كالتالي:

{<div className="btn btn-lg" onClick={this.toggle}>Toggle</div>}

وفي حالة أردت أن تقوم بتمرير قيمة معينة للتابع toggle مثل الكائن event يمكنك أن تستخدم الدالة السهمية

onClick={(event) => this.toggle(event, params)}

بهذا الشكل لن يتم إستدعاء التابع toggle مباشرة بل سيتم تنفيذه إذا قام المستخدم بالضغط عليه.

بالتوفيق.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...