2015-05-15 74 views
7

我已經創造了一些反應的組分,因此,父...得到一些道具共享組件...陣營js和PropTypes重複整個

再以後的每一次孩子使用大多數道具,那麼孩子孩子的。

**--> Parent** 
(required props) 
**-------> child** 
(required props) 
**-------> child** 
(required props) 
**------------> sub child** 
(required props) 
**------------> sub child** 

這些「所需道具」對於所有這些部件是相同的。似乎過度,每當我更新父母的道具,我必須進入所有這些孩子,並更新(如果他們是必需的)。當然,它們是必需的和需要的,但是如果有一個快捷方式/或者實現這個重複是沒有必要的,那麼它們很好奇。有任何想法嗎?

感謝

+0

我不明白的問題。你是什​​麼意思更新財產?你的意思是改變屬性名稱?喜歡在JavaScript文件中更改名稱? 如果你正在討論從父母到孩子的道具價值更新,那麼這就是國家的用途,它應該根據那個父母的狀態值更新任何子道具。 – PythonIsGreat

+1

是{... this.props}你想要什麼?將所有道具傳遞給下一個組件。 –

回答

7

你可以存儲在一個對象的道具類型,你合併到每個組件的propTypes

var requiredPropTypes = { 
    foo: ..., 
    bar: ... 
}; 

var ComponentA = React.createClass({ 
    propTypes: { 
     ...requiredPropTypes, 
     // ComponentA's prop types follow 
     // ... 
    }, 
    // ... 
}); 

var ComponentB = React.createClass({ 
    propTypes: { 
     ...requiredPropTypes, 
     // ComponentB's prop types follow 
     // ... 
    }, 
    // ... 
}); 

propTypes值只是一個對象。你如何構建這個對象完全取決於你。

+0

hmm。這似乎是可行的。但我不想讓這種價值成爲全球性的......否則,我還能如何將它融入每個孩子?感謝您的迴應,順便說一句,欣賞它。 – user1492442

+0

你如何組織你的代碼取決於你。不需要將共享類型設置爲全局,只需要在需要的地方訪問即可。如果您正在使用模塊,請將共享的道具作爲模塊並在需要時將其導入。 –

1

這很簡單。如果你的寫作ES6的代碼,你可以使用一個組件的形狀導入

import React, { PropTypes } from 'react';  
import { Button } from 'components'; 

const NewComponent = (props) => { 
    return (
     {props.buttons.map((button) => 
      <div> 
       <Button {...props} /> 
      </div> 
     )} 
    ); 
} 

NewComponent.propTypes = { 
    buttons: PropTypes.arrayOf(PropTypes.shape({ Button }.propTypes)) 
}; 
0

spread operator可能會派上用場:

import OtherComponent from './OtherComponent'; 

const MyComponent = ({ foo }) => (<OtherComponent {...foo} />); 

MyComponent.propTypes = { 
    foo: PropTypes.shape({ ...OtherComponent.propTypes }), 
}; 

export default MyComponent;