2017-03-15 116 views
0

我最近不得不在最近幾天中選擇ReactJS來處理項目。雖然我掌握了大部分基礎知識,但我遇到了有關ES5和ES6語法的問題。我無法完全掌握差異以及如何將代碼從一個轉換到另一個。我一直在使用大量的ES6複製和粘貼功能,所以對我來說很容易。但是當我遇到ES5時,我很掙扎。將ReactJS代碼轉換爲ES6語法

我試圖從預先存在的代碼創建一個模態,但我不知道它到底應該是什麼樣子。這是我想要轉換的內容:

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

const Example = React.createClass({ 
    getInitialState() { 
     return { showModal: false }; 
    }, 

    close() { 
    this.setState({ showModal: false }); 
    }, 

    open() { 
    this.setState({ showModal: true }); 
    }, 

    render() { 
    const popover = (
     <Popover id="modal-popover" title="popover"> 
    very popover. such engagement 
    </Popover> 
); 
const tooltip = (
    <Tooltip id="modal-tooltip"> 
    wow. 
    </Tooltip> 
); 

return (
    <div> 
    <p>Click to get the full Modal experience!</p> 

    <Button 
     bsStyle="primary" 
     bsSize="large" 
     onClick={this.open} 
    > 
     Launch demo modal 
    </Button> 

    <Modal show={this.state.showModal} onHide={this.close}> 
     <Modal.Header closeButton> 
     <Modal.Title>Modal heading</Modal.Title> 
     </Modal.Header> 
     <Modal.Body> 
     <h4>Text in a modal</h4> 
     <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> 

     <h4>Popover in a modal</h4> 
     <p>there is a <OverlayTrigger overlay={popover}><a href="#">popover</a></OverlayTrigger> here</p> 

     <h4>Tooltips in a modal</h4> 
     <p>there is a <OverlayTrigger overlay={tooltip}><a href="#">tooltip</a></OverlayTrigger> here</p> 

     <hr /> 

     <h4>Overflowing text to show scroll behavior</h4> 
     <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> 
     <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> 
     <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> 
     <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> 
     <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> 
     <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> 
     <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> 
     <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> 
     <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> 
     </Modal.Body> 
     <Modal.Footer> 
     <Button onClick={this.close}>Close</Button> 
     </Modal.Footer> 
    </Modal> 
    </div> 
    ); 
} 
    }); 

    ReactDOM.render(<Example />, mountNode); 

任何提示/技巧/幫助將真正感激!

回答

0

如果您使用webpack之類的東西來構建您的js包,您可以選擇要使用的es6的哪些功能。它不是「全部或全部」。例如,在上面您使用的是ES6導入語法。

此外,es6功能與React.createClass()和React的擴展組件結構之間的區別也很重要。你可以在這裏閱讀關於https://facebook.github.io/react/docs/components-and-props.html