2016-12-15 1 views
2

CSS 인라인 스타일을 함수로 정의 할 수 있습니까? 나는 이것을 시도하고있다 :ReactJS : 함수로 스타일 속성 정의하기

render() { 
var listStyle = { 
    position: "relative", 
    display:() => { 
     console.log("Still alive") 
     if(this.state.open) { 
      return "block"; 
     } 
     else return "none"; 
    } 
return <li style={listStyle}> 
..... 
} 

아무 소용이 없다. 심지어 "아직 살아있다"라고 기록하지 않기 때문에 함수는 실행되지 않습니다. JS에서 객체에 함수를 할당하는 데 아무런 문제가 없다는 것을 알고 있습니다. 그래서 무엇을 제공합니까?

+1

그것은 함수가 아니라 문자열이기를 기대합니다. 그래서 당신의 기능을 실행하는 것을 귀찮게하지 않습니다. JS가 그렇게 할 수는 있지만 그렇다고해서 반응이 기대하고 있거나 기대 한대로 처리 할 수있는 것은 아닙니다. 또는 그렇게 기울이면 문자열을 반환하는 함수를 실행할 수 있습니다. –

+0

그래, 나는 (고맙게도) 함수가 존재하기 때문에 스스로를 실행하지 않을 것이라는 것을 잊었다. 헤즈 업에 감사드립니다! – Rafael

답변

3

당신은 속성

의 값에 액세스하지만 만약 정말 기능처럼 나는 스타일 개체를 생각

var listStyle = { 
    position: "relative", 
    display:this.state.open?'block':'none' 
} 

, 더 간단하게 다음과 같이 수행하려고 할 수 있습니다. 당신은 내가 그 일 경우 알려

var listStyle = { 
    position: "relative", 
    display: (()=>{ 
     console.log('alive') 
     if(this.state.open){ 
      return 'block' 
     }else{ 
      return 'none' 
     } 
    })() 

} 
+0

나는 두 번째 예제를 좋아한다 :) 이것을 공유해 주셔서 감사합니다. – EQuimper

+0

좋아요, 그래서 그냥() 함수를 실행할 수 있다는 것을 잊어 버렸습니다. 거기에 "return"을 넣었 기 때문에 자체적으로 실행되지는 않습니다. 감사! 그래, 첫 번째 대안은 확실히 더 우아합니다. 웬일인지 그것을하는 것은 나의 머리에서 완전히 갔다. – Rafael

2

당신이

const listStyle = { 
    position: 'relative' 
} 


const checkDisplay = open => { 
    if (open) { 
    return "block" 
    } 
    return "none"; 
} 

<li style={{...listStyle, display: checkDisplay(this.state.open)}}></li> 

로 갈 수있는 실행하기 위해 자체 실행 익명 기능을 사용할 수 있습니다. 희망이 당신을 도울 수 있습니다 :)

+1

그것은 작동합니다! 좀 더 우아하기 때문에 다른 답변을 사용하겠습니다.하지만이 +1을 사용하면 자격이 있습니다. ;) – Rafael

+0

완벽하게, 그 일을 듣고 행복하게 :). 그리고 내가 좋아하는 다른 사람을위한 네 좋은 선택;) – EQuimper