2015-05-15 20 views
7

tôi đã tạo ra một số phản ứng linh kiện và như vậy, phụ huynh ... được một vài đạo cụ ...Phản ứng js và PropTypes lặp lại trên khắp các thành phần chia sẻ

Mỗi đứa trẻ tiếp theo sau đó sử dụng hầu hết các đạo cụ, sau đó trẻ em của trẻ em.

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

"đạo cụ bắt buộc" này giống nhau cho tất cả các thành phần đó. Có vẻ quá mức mà bất cứ khi nào tôi cập nhật một sự ủng hộ trong Phụ Huynh, thì tôi phải đi vào tất cả những đứa trẻ đó và cập nhật (nếu chúng được yêu cầu). Tất nhiên, chúng được yêu cầu và cần thiết, nhưng tò mò nếu có một phím tắt/hoặc thực hiện lặp lại này là không cần thiết. Bất kỳ ý tưởng?

Cảm ơn

+0

Tôi không hiểu câu hỏi. Những gì bạn có nghĩa là cập nhật tài sản? bạn có nghĩa là thay đổi tên tài sản? như thể chất thay đổi tên trong tệp javascript? Nếu bạn đang nói về việc cập nhật giá trị đạo cụ từ cha mẹ sang con, thì đó là trạng thái của, nó sẽ cập nhật mọi đạo cụ con dựa trên giá trị trạng thái gốc đó. – PythonIsGreat

+1

Có phải {... this.props} bạn đang tìm kiếm điều gì? Chuyển tất cả các đạo cụ đến thành phần tiếp theo. –

Trả lời

7

Bạn có thể lưu trữ các loại prop của bạn trong một đối tượng mà bạn nhập vào từng thành phần của 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 
     // ... 
    }, 
    // ... 
}); 

Giá trị của propTypes chỉ là một đối tượng. Cách bạn xây dựng đối tượng đó hoàn toàn tùy thuộc vào bạn.

+0

hmm. có vẻ như có thể làm được. nhưng tôi không muốn phải làm cho giá trị đó toàn cầu ... khác, tôi sẽ có thể đưa nó vào mọi đứa trẻ như thế nào? Cảm ơn phản ứng của bạn, btw, đánh giá cao nó. – user1492442

+0

Cách bạn sắp xếp mã của mình tùy thuộc vào bạn. Không cần phải làm cho các loại chia sẻ toàn cầu, chỉ cần có thể truy cập được khi chúng cần. Nếu bạn đang làm việc với các mô-đun, hãy thực hiện các mô-đun được chia sẻ một mô-đun và nhập nó khi cần. –

1

Điều này khá đơn giản. Nếu mã es6 văn bản của bạn, bạn có thể sử dụng hình dạng của một thành phần mà bạn nhập

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

Các spread operator có thể có ích:

import OtherComponent from './OtherComponent'; 

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

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

export default MyComponent; 
Các vấn đề liên quan