2017-09-21 1 views
2

J'ai un problème de rendu dynamique du pseudo avant le contenu dans les composants stylés.Comment faire pour afficher dynamiquement le pseudo avant le contenu dans le composant stylé

Est-ce que je fais quelque chose de mal?

Je n'ai aucun problème lorsque je rend statiquement le pseudo avant le contenu, mais cela ne fonctionne pas lorsque je l'essaie dynamiquement.

React Component

const Test = (props) => { 

    return (
     <Text before={12345}> 
      {props.children} 
     </Text> 
    ); 

}; 

Styled Component (Œuvre non)

const Text = styled.span` 

    &:before { 
     content: ${props => { 
      console.log(props.before); // I see '12345' in log. 
      return props.before; 
      } 
    } 


`; 

Styled Component (Cela fonctionne bien)

const Text = styled.span` 

    &:before { 
     content: '12345' 
    } 


`; 

Répondre

3

C'est parce que content valeur doit être entre guillemets

Voici le CSS de travail

const Block = styled.div` 
    &:before { 
     display: absolute; 
     top:0; 
     content: '${props => props.before}' 
    } 
` 

Veuillez noter que je mets à profit ES6 new features dans lequel une seule instruction Il n'est pas nécessaire d'utiliser des accolades {} et return.

Codepen: https://codepen.io/metju/pen/zEKeOm

+0

Oh merci beaucoup!! – hytm

0

-composants style fonctionne comme Sass, rien de différent

const Text = styled.span` 
    &:before { 
     content: ${props => !!props.before ? props.before : " "}; 
    } 

`;

Je suis // rend: "Je suis un"

Référence provenant Before and After pseudo classes used with styled-components

+0

Je l'ai utilisé '' '!! props.before''', ceci est une déclaration truthy qui convertit une chaîne en une valeur booléenne. Juste pour vérifier si vous obtenez '' '' props.before''' ou non. –

+0

Merci pour votre aide! Mais, ça ne marche pas ... J'ai essayé ça aussi. &: avant { content: $ {props => !! props.before? 'aaa': "bbb"}; . } Les deux 'aaa' et 'bbb' doesn "t get rendu – hytm

+0

Bien sûr, comme je l'ai mentionné dans mon post, Si j'écris comme ça, ça marche &:. Avant { contenu: '12345' } – hytm