2016-08-01 3 views
0

저는 ES6 및 Redux를 처음 사용합니다. 일부 코드를보고이 새로운 ES6 구문에서 어떤 일이 벌어지고 있는지 이해하려고합니다.ES6 반응 Redux 구문 설명

나는 이것이 단순 할 수 있다고 생각하지만 나는 그것을 이해하지 않고 다른 사람을 도와 줄 수도 있습니다.

다음 코드가 어떻게 반응 요소를 생성하는지 알고 싶습니다. 메신저 React.createClass 메서드를 잘 알고 있지만 여기에 명시된 것처럼 보이지 않거나 적어도 명시 적으로 명시되지 않은 것 같습니다. 나는 React가 임포트 된 것을 볼 수 있지만 나머지 코드에서는 언급하지 않았다. 그렇다면 FileTable이 어떻게 반응 구성 요소로 바뀌 었습니까?

const 변수 FileTable에는 일반적으로 React.createClass의 렌더링 메소드가 포함되어있는 것 같습니다. 그렇다면 componentDidMount, componentDidUpdate 등의 메소드는 어디에 정의됩니까?

이 문제에 대한 도움을 주시면 감사하겠습니다. React.createClass, ES6 class 또는 Stateless (pure) function 구성 요소 -

import React, { PropTypes } from 'react'; 
import { connect } from 'react-redux'; 
import * as actions from '../actions'; 

const FileTable = ({ fileList, getFileList}) => { 

    return (
     <ul className="filterable-table"> 
      {fileList.map((file)=><li>{file.fileName}</li>)} 
     </ul> 
    ); 
}; 

FileTable.propTypes = { 
    fileList: PropTypes.array, 
}; 

const mapStateToProps = (state) => { 
    return { 
     fileList: state.fileList 
    }; 
}; 

const mapDispatchToProps = (dispatch) => { 
    return { 
     getFileList:() => dispatch(actions.getFileList()) 
    }; 
}; 

export default connect(
    mapStateToProps, 
    mapDispatchToProps 
)(FileTable); 

답변

4

만들 수있는 3 가지 방법으로 구성 요소를 반응한다. 이것은 상태 비 저장 구성 요소입니다. 즉 상태, 라이프 사이클 메소드 (예 : componentDidMount 또는 componentDidUpdate) 및 참조가 없으며 추측 한대로 반응 클래스의 렌더링 메소드와 유사합니다.

순전히 표현적인 멍청한 구성 요소가 필요할 때마다, 간략 함으로 인해 상태 비 저장 구성 요소를 사용할 수 있습니다. 연결은 상태 비 저장 메소드를 래핑하는 스마트 컴포넌트를 생성하기 때문에 redux와 잘 어울립니다.

성능과 관련하여 상태없는 구성 요소는 상태가없는 ES6 클래스 구성 요소보다 성능이 향상되지 않습니다. 그러나 페이스 북은 미래에 최적화가있을 것이라고 밝혔다.

+0

컴파일러를 , 아마도 babel/webpack/browserify 인 JSX를 javascript로 변환하는 플러그인이 있습니다 .babel에 대해 react-jsx transform을 사용하면 JSX를 React로 변형 할 수 있고이 상태없는 함수가 'React .createElement'. 많이 도움이되는 – CallMeNorm

+0

!하지만 그럴 경우, React 구성 요소를 만들려면 const newComponent = React.createClass ({render : ...)를 사용하여 정상적인 방법으로 정의 할 수 있습니까? , componentDidMou nt : ...}). 그리고 마지막에 connect (mapStateToProps, mapDispatchToProps) (newComponent)를 호출하면 newComponent가 저장소에 연결될 것입니다. – X0r0N

+0

사실 React.Component를 확장하고 render 메소드에서 호출되는 클래스에서 상태 비 저장 함수를 래핑합니다. Connect는 React.Component를 확장하는 구성 요소이며 렌더링 메서드에서 랩핑하는 구성 요소를 호출하며 상태 비 저장 기능을 갖 춥니 다. 아무리 당신이 포장 할지라도, 무국적 기능에는 수명주기 방법이 없을 것입니다. –

0

여기에서을 React 구성 요소로 선언 할 필요는 없습니다. React는 순수한 함수를 알고 있습니다.

Pure functionsComponent에서 상속 할 필요가 없습니다. 그들은 모든 구성 요소 유형에 적합하지,하지만 간단한 HTML을 위해 그들이 선호하고 렌더링 (예를 들어, eslint-plugin-react prefer-stateless-function를 참조하십시오.

순수 기능을하지 구성 요소 라이프 사이클, 관련 방법이 있습니까 등

관련 문제