2017-12-20 3 views
-1

Ich habe eine Frage in Bezug auf Objekt Destrukturierung in JS. Im folgenden Code würde ich davon ausgehen, dass der Komponente Layout das Wertlayout (mit Kleinbuchstaben) zugewiesen worden wäre. Der Wert des Layouts ist jedoch nicht definiert und Layout wird verwendet.ES6-Objekt Destrukturierung Klärung mit React-Komponente

const MustBeAuthenticated = ({ layout: Layout, ...rest }) => { 
    if (!isAuthenticated()) { 
    return redirectToLogin({...rest}) 
    } 
    return (
    <Layout {...rest} /> 
) 
} 

Ich habe dann versucht, die Komponente mit ({ Layout, ...rest }) zu extrahieren, aber ich bekomme wieder einen undefinierten Fehler ausgelöst. Ich wollte nur etwas klären, wenn ich etwas falsch verstehe.

+0

Nein sind Sie tatsächlich Recht. Aber ich sehe keinen Sinn darin '{... Rest}' zu machen, 'Rest' wäre genug –

+0

Es ist' ... Rest', der einen Fehler nicht 'Layout' wirft, der richtig ist –

+0

Ich rate meine Hauptfrage In Bezug auf '{layout: Layout}' würde ich annehmen, dass "Layout" zugänglich wäre und nicht "Layout". Gibt es hinter den Kulissen eine reaktive Magie, die diese Großschreibung verursacht? – William

Antwort

1
function logmsg({logMessage: LogMessage, ...rest}) { 
    console.log(LogMessage); // prints 'hi' 
    console.log(rest); // prints {bye: 'bye'} 
} 

logmsg({logMessage: 'hi', bye: 'bye'}); 

Dies korrekt funktioniert.

0

Ich denke, dass Sie cloneElement von der React API verwenden möchten. Sie haben Layout in einer Variablen gespeichert, wenn Sie es zurückgeben möchten, müssen Sie es verwenden, nicht die Layout-Komponente.

Etwas wie folgt aus:

const MustBeAuthenticated = ({layout, ...rest}) => { 
    if (!isAuthenticated()) { 
    return redirectToLogin({...rest}) 
    } 
    return (
    React.cloneElement(
     layout, 
     rest, 
    ) 
) 
} 

Das gibt Ihnen so etwas wie dieses

<element.type {...element.props} {...props}>{children}</element.type>