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

السؤال

نشر

لدي مكون React التالي:

import React from 'react';

export class Navbar extends React.Component {
    render(){
      return (
        <ul className="navbar navbar-full">
        ...
        </ul>
      );
    }
}

عندما أقوم بإستدعاء المكون السابق كالتالي يظهر لي خطأ:

import React from 'react';
import ReactDOM from 'react-dom';

import Navbar from './components/navbar.jsx';

export class App extends React.Component{
  render(){
    return(
        <Navbar />
        ...
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));

رسالة الخطأ:

Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. Check the render method of `App`.

ما أحاول فعله هو إستخدام webpack مع React و babel لتحويل كود  ES6، ما الخطأ الذي أفعله؟ كيف يمكنني إستيراد وتصدير المكون بشكل صحيح؟

Recommended Posts

  • 0
نشر

الخطأ لديك في تصدير المكون 
هناك طريقتين 

  1. default export
    //export default تقوم باستخدام 
    export class Navbar extends React.Component { // خطأ
        render(){
          return (
            <ul className="navbar navbar-full">
            ...
            </ul>
          );
        }
    }
    
    export default class Navbar extends React.Component {} // صح
    
    // عندها تقوم بإستدعاء المكون السابق كالتالي
    
    
    import Navbar from './components/navbar.jsx';
    
    export class App extends React.Component{
      render(){
        return(
            <Navbar />
            ...
        );
      }
          }

     

  2. named export 
     

    // {} تقوم باستخدام 
    class Navbar extends React.Component 
        render(){
          return (
            <ul className="navbar navbar-full">
            ...
            </ul>
          );
        }
    }
    
    export { Navbar };  // هكذا
    
    // عندها تقوم بإستدعاء المكون السابق كالتالي
    
    
    import { Navbar } from './components/navbar.jsx';
    
    export class App extends React.Component{
      render(){
        return(
            <Navbar />
            ...
        );
      }
    }

     

  • 0
نشر

هناك خطأ بسيط وهو حول ال export و ال import حيث نحتاج عند عمل import بالطريقة التي قمت بها أن يكون ال export default كالتالي

import React from 'react';

export class Navbar extends React.Component {//default لاحظ كلمة
    render(){
      return (
        <ul className="navbar navbar-full">
        ...
        </ul>
      );
    }
}

أما إذا أردت عمل import ولكن بدون استخدام ال default export أو تحتاج لاستخدام named export يجب عليك وضع ال {} حول الكائن الذي تريد إستدعائه كالتالي

 

import React from 'react';
import ReactDOM from 'react-dom';

import {Navbar} from './components/navbar.jsx';//{ } لاحظ ال 

export class App extends React.Component{
  render(){
    return(
        <Navbar />
        ...
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));

 

  • 0
نشر

الخطأ يطرأ لأنك تستخدم في التصدير named export وفي الاستيراد أن تستورده أنه default export وهذا خطأ فهناك فرق بين الاستخدامين فبالنسبة ل named export فالاستيراد يتم عن طريق ارفاق المستورد داخل {} وهذا ببساطة راجع لطبيعة عمل named export فيمكنك عن طريقها التصدير كم من مرة في ملف واحد

let myFunction = () => {
  console.log('myFunction');
};

let variable = 'variable';

export { myFunction, variable };
import myFunction from './defaultExport.js';

وعند الاستيراد نستورد كالتالي

import { myFunction, variable } from './namedExport.js';

أما بالنسبة ل default export  فهو يخولك للتصدير مرة واحدة فقط في ملف ما 

let myFunction = () => {
  console.log('myFunction');
};

export default myFunction;

ونقوم بالاستيراد كالتالي

import myFunction from './defaultExport.js';

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...