2016-06-17 2 views
0

기본적으로 이미지를 숨기려고하고 있는데, 엘리먼트가 올려 졌을 때만 표시하려고합니다. 나는 기본 상태 등을 설정할 수있었습니다. 유일한 문제는 이미지를 보여 주거나 숨길 수있는 if 문을 만드는 것입니다. 상태가 true로 설정되어 있으면 반응 쇼 이미지

는 구성 요소입니다 : 내가 몇 가지를 시도했습니다

import React from 'react'; 
import { Link } from 'react-router'; 

import Eyecon from '../../static/eye.svg'; 


class Item extends React.Component { 
    constructor(props) { 
     super(props); 
     this.displayName = 'Item'; 
     this.handleHover = this.handleHover.bind(this); 
     this.state = { 
      hover: false 
     }; 
    } 
    mouseOver() { 
     this.state.hover = true; 
    } 
    mouseOut() { 
     this.state.hover = false; 
    } 
    handleHover() { 
     console.log("hover"); 
    } 
    render() { 
     const { item, i } = this.props; 
     return (
      <div className="grid-box"> 
       <img src={Eyecon}/> 
      </div> 
     ) 
    } 
} 


export default Item; 

뿐만 아니라 가장 좋은 방법이 무엇인지보고 싶어요. 시간에 대한

덕분에

+1

나는 반응 비교적 새로운 해요하지만 난 당신이 할 수 있다고 생각 : state' 당신이'이를 호출하여 직접 수정해서는 안 즉, 불변 '하는 것이 {this.state.hover && } – bdc

+0

노트 .state.hover = true'. 대신에 this.setState ({hover : true}) – Hamms

답변

2

여러 가지 방법이 있습니다. 다음과 같이합니다.

render() { 
    const { item, i } = this.props; 
    return (
     <div className="grid-box"> 
      {this.state.hover ? (
       <img src={Eyecon} /> 
      ) : null} 
     </div> 
    ) 
} 

그러나 이미지 렌더링을 별도의 함수로 추상화하고 필요할 때 아무 것도 반환하지 않을 수도 있습니다.

Sitenote : 상태를 직접 변경하면 안됩니다. this.setState() 기능을 사용하십시오. 그렇지 않으면 구성 요소가 다시 렌더링되지 않습니다.

또한이 동작을 위해 CSS :hover을 사용하는 이유는 무엇입니까?

+0

왜'null'이 아니라 {{this.state.hover && }'을 시도해보십시오. – azium

+0

@azium - 코드 스 니펫은 게시 된 답변보다 훨씬 읽기 쉽습니다. –

+0

@azium 필자는 내 것을 더 읽기 쉽다고 생각하지만, 의견의 문제 다. React 업데이트로 인해 잘못 렌더링되는 일을하는 방식에 문제가있는 사람을 기억합니다. 정확한 문제가 무엇인지 기억할 수는 없지만 –

0

나는 보통과 같이, 헬퍼 함수에 조건 내용의 표시를 처리하고자 :

function renderImage() { 
    const { hover } = this.state; 

    if (hover) { 
     return (
      <img src={Eyecon} /> 
     ); 
    } 
} 

그런 다음, 당신은 단지 render()

render() { 
    const { item, i } = this.props; 
    return (
     <div className="grid-box"> 
      {renderImage.call(this)} 
     </div> 
    ) 
} 
에서이 함수를 호출 할 수 있습니다