2016-02-02 20 views

Trả lời

44

Bạn có thể sử dụng kỹ thuật sau đây để tiêu thụ một số các đạo cụ và vượt qua trên còn lại:

render() { 
    var {one, ...other} = this.props; 
    return (
    <Cpnt {...other}> 
     <Subcpnt one={one} /> 
    </Cpnt> 
); 
} 

Source

+4

Đã xảy ra sự cố với vấn đề này và không thể giải quyết vấn đề này. Thông báo lỗi: 'Xây dựng mô-đun không thành công: Cú phápError: Mã thông báo không mong đợi (7:19)' và thông báo lỗi đã làm nổi bật toán tử spread trong mã. 'var {linkType, ... other} = this.props;' – user2498045

+0

Đây là giải pháp http://stefan.magnuson.co/articles/frontend/using-es7-spread-operator-with-webpack/ –

+0

bạn biết điều gì sẽ xảy ra nếu bạn vượt qua cùng một prop một cách rõ ràng? EG, nếu 'other' chứa một prop gọi là 'myProp' và bạn đã làm một cái gì đó như thế này: ' '. Giá trị nào 'Cpnt' sẽ có cho' myProp'? Đặt hàng phụ thuộc? – NSjonas

7

Điều bạn cần làm là tạo bản sao đối tượng đạo cụ và xóa (các) khóa bạn không muốn. Cách dễ nhất là sử dụng omit từ lodash nhưng bạn cũng có thể viết một đoạn mã cho điều này (tạo một đối tượng mới có tất cả các phím của đạo cụ ngoại trừ một phím).

Với omit (một vài lựa chọn ở phía trên, tùy thuộc vào những gì gói bạn nhập/ES hương vị bạn sử dụng):

const omit = require('lodash.omit'); 
//const omit = require('lodash/omit'); 
//import { omit } from 'lodash'; 

... 
render() { 
    const newProps = omit(this.props, 'one'); 
    return <Cpnt {...newProps}><Subcpnt one={this.props.one} /></Cpnt>; 
} 
+0

Điều này có vẻ sạch hơn so với giải pháp được chấp nhận. –

0

Nếu bạn có rất nhiều đạo cụ bạn không muốn trong ...rest ví dụ defaultProps, nó có thể gây phiền nhiễu để viết tất cả chúng hai lần. Thay vào đó, bạn có thể tự tạo bản thân bằng một vòng lặp đơn giản trên các đạo cụ hiện tại như:

let rest = {}; 
Object.keys(this.props).forEach((key, index) => { 
    if(!(key in MyComponent.defaultProps)) 
     rest[key] = this.props[key]; 
}); 
Các vấn đề liên quan