2016-11-16 2 views
-1

私は反応しています。ここにアイコンがあります。このアイコンをCSSのようにホバー状態にする必要がありますが、Reactjs、私のスクリプトで何かが間違っていますが、何がわからないのですか

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

var FontIcon = React.createClass({ 

getInitialState:() => { 
    return { 
     hover: false, 
    }; 
}, 

render(){ 

    var _props = this.props, 
    iconStyle = { 
     'font-size': _props.size, 
     cursor: "default" 
    } 

    function hoverOn(){ 
     this.setState({ 
      hover: true 
     }); 
    } 

    function hoverOff(){ 
     this.setState({ 
      hover: false 
     }); 
    } 

    if (this.state.hover) { 
     iconStyle.color = _props.hoverColor; 
    } else { 
     iconStyle.color = _props.color; 
    } 

    return(
      <i className="material-icons" style={iconStyle} onmouseenter={this.hoverOn} onmouseleave={this.hoverOff} >{_props.className}</i> 
    ); 
} 
}); 

ReactDOM.render(
    <FontIcon className="account_circle" size="100" color="blue" hoverColor="red" />, 
    document.getElementById('app') 
); 

そして、私が間違っているのか分からない:アプリ、ここに私のコードは反応する助け

+0

がrender' '内の関数を宣言しないでください

  • あなたはonMouseEnterとonMouseLeaveプロパティを使用する必要があります。それらは 'render'と同じレベルになければなりません。 –

  • +0

    @FabianSchultzしかし、これは私の次のようなエラーです:./app.jsのエラー モジュールのビルドに失敗しました:SyntaxError:/ my path /予期しないトークン(12:1) 10 | } 11 | > 12 |関数hoverOn(){ |^ 13 | this.setState({ 14 | hover:true 15 |}); – Karol

    +0

    前面に 'function'をなくします。 –

    答えて

    0

    まず用/おかげで、SETSTATEで()のレンダリングを使用しないでください!
    ReactイベントはすべてCamelCaseで書かれているので、これは単なるjavascriptなので注意してください。

    var FontIcon = React.createClass({ 
    
        getInitialState() { 
         return { 
          hover: false, 
         }; 
        }, 
        hoverOff() { 
         this.setState({ 
          hover: false 
         }); 
        }, 
        hoverOn() { 
         this.setState({ 
          hover: true 
         }); 
        }, 
        render() { 
         var _props = this.props; 
         var iconStyle = { 
          'font-size': _props.size, 
          cursor: "default" 
         }; 
    
         if (this.state.hover) { 
          iconStyle.color = _props.hoverColor; 
         } else { 
          iconStyle.color = _props.color; 
         } 
    
         return(
          <i className="material-icons" 
           style={iconStyle} 
           onMouseEnter={this.hoverOn} 
           onMouseLeave={this.hoverOff} > 
           {_props.className} 
          </i> 
         ); 
        } 
    }); 
    
    +0

    しかし、画面上に何もありません – Karol

    +0

    私のコードを編集しました... –

    +0

    申し訳ありません、私の悪い、それはすべて働いて、ありがとうございます – Karol

    0
    1. render内の関数を宣言しないでください。このような何かを試してみてください。 Render関数は非常に頻繁に呼び出されるため、ブラウザは新しい関数を作成して古い関数をメモリから削除します。だから、結果コードhttps://facebook.github.io/react/docs/events.html#mouse-events

    import React from 'react'; 
    import ReactDOM from 'react-dom'; 
    
    var FontIcon = React.createClass({ 
    
    getInitialState:() => { 
        return { 
         hover: false, 
        }; 
    }, 
    
    hoverOn() { 
        this.setState({ 
         hover: true 
        }); 
    }, 
    
    hoverOff() { 
        this.setState({ 
         hover: false 
        }); 
    }, 
    
    render() { 
        var _props = this.props, 
        iconStyle = { 
         'font-size': _props.size, 
         cursor: "default" 
        } 
    
        if (this.state.hover) { 
         iconStyle.color = _props.hoverColor; 
        } else { 
         iconStyle.color = _props.color; 
        } 
    
        return(
          <i className="material-icons" 
           style={iconStyle} 
           onMouseEnter={this.hoverOn} 
           onMouseLeave={this.hoverOff}>   
            {_props.className} 
          </i> 
        ); 
    } 
    }); 
    
    ReactDOM.render(
        <FontIcon className="account_circle" size="100" color="blue" hoverColor="red" />, 
        document.getElementById('app') 
    ); 
    
    +1

    ここにバインドする必要はありません...これはes6クラスではなく " React.createClassを使用しているときにautobindされています –

    +0

    @Timur Bilalov、回答ありがとうございますが、まだ動作していません – Karol

    +0

    Seb、説明してくれてありがとうございます。 Karol、私はエラーを見つけました。 onMouseEnterとonMouseLeaveは、onmouseenterとonmouseleaveをコンポーネントのプロパティとして使用する必要はありません。 –

    関連する問題