2016-05-27 14 views
6

Tôi tự hỏi làm cách nào để nhập/sử dụng/thử nghiệm các thành phần mới trong RC phản ứng? Cụ thể, tôi muốn nhập và sử dụng SwipeableRow components trong 0.27.0-rc1. Khi tôi có thể nhập, tôi có thể tìm hiểu thông số và tùy chọn, nhưng tôi thậm chí không thể vượt qua bước import ...Phản ứng tự nhiên: cách nhập/sử dụng các thành phần thử nghiệm RC, tức là SwipeableRow (0,27 rc)?

Tôi có bản phát hành được gắn thẻ phù hợp được cài đặt qua npm nhưng khi tôi cố gắng nhập khẩu các linh kiện, chúng hiển thị như undefined:

import { 
    ListView, 
    ScrollView, 
    StyleSheet, 
    SwipeableListView, 
    Text, 
    TouchableHighlight, 
    View 
    } from 'react-native'; 

tôi nhận được lỗi như:

screenshot

Render mã (kích hoạt trên):

render() { 
    var ds = new SwipeableListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 
    blah blah blah 
} 

Tôi cũng đã cố gắng di chuyển các thư mục SwipeableRow là một đứa trẻ của Libraries (thay vì Libraries ->Experimental ->SwipeableRow, bây giờ nó là Libraries ->SwipeableRow). Lỗi tương tự.

Tôi đã thử nhập Experimental và sau đó sử dụng <Experimental.SwipeableRow.SwipeableListView>, nhưng điều đó cũng ném ngoại lệ "Không xác định không phải là đối tượng".

Như đã đề cập, tôi cũng đã cố gắng nhập khẩu bằng cách sử dụng một đường dẫn trực tiếp đến các mô-đun nút:

import { 
    SwipeableListView 
} from '../../../node_modules/react-native/Libraries/Experimental/SwipeableRow'; 

Đó dẫn:

Unable to resolve module ../../../node_modules/react-native/Libraries/Experimental/SwipeableRow from <source component path>: File <path>/node_modules/react-native/Libraries/Experimental/SwipeableRow/index doesnt exist 

Sau đó tôi đã cố gắng:

import { 
    SwipeableListView 
} from '../../../node_modules/react-native/Libraries/Experimental/SwipeableRow/SwipeableListView'; 

Kết quả là:

Unable to resolve module emptyFunction from <path>/Libraries/Experimental/SwipeableRow/SwipeableRow.js: Unable to find this module in its module map or any of the node_modules directories under /Users/node_modules/emptyFunction and its parent directories. This might be related to github issue 4968 (paraphrasing). 

Có cách nào để sử dụng và kiểm tra các thành phần thử nghiệm này không? Hay tôi chỉ phải đợi bản phát hành chính thức?

+0

Điều đó dường như khắc phục sự cố emptyFunction https://github.com/facebook/react-native/pull/7954 –

+0

Ồ, tìm thấy tốt @HugoDozois. Tôi đã cố gắng tự thực hiện thay đổi cục bộ, nhưng tôi vẫn gặp lỗi khi nhập SwipeableListView từ phản ứng gốc: "undefined không phải là một đối tượng (đánh giá new _reactNative.SwipeableListView.getNewDataSource ')" – user

+0

Tôi vừa thử nghiệm cục bộ và nó hoạt động, vì vậy tôi làm cho nó như một câu trả lời để nó dễ tìm. –

Trả lời

6

Vì mô-đun có chú thích @providesModule, bạn có thể yêu cầu chú thích trực tiếp. Đây là một cái gì đó cụ thể cho các packager được sử dụng trong phản ứng bản địa!

Bạn chỉ có thể làm

const SwipeableRow = require('SwipeableRow'); 
// or 
import SwipeableRow from 'SwipeableRow'; 

Và để khắc phục vấn đề chức năng trống rỗng, chỉ cần thay đổi yêu cầu như sau:

const emptyFunction = require('fbjs/lib/emptyFunction'); 

trong khi chờ đợi next version để đi ra.

+0

Oh tuyệt vời, cảm ơn! Tôi đoán điều này chủ yếu là sự thiếu hiểu biết của tôi với người đóng gói bản địa phản ứng ... nhưng nó có tác dụng với tôi. – user

0

Tôi là người mới hoàn thành ở đây, nhưng trong mã bạn đã cung cấp, bạn đang nhập SwipeableListView từ gốc tự do. Nếu tôi không nhầm, nếu bạn sử dụng .js từ liên kết bạn đã cung cấp, bạn phải nhập từ đường dẫn của bạn nơi các tệp .js đó nằm. Một ví dụ về ý tôi là:

import { SwipeableListView } from './YourPathToTheJSFile'; 

Tôi đã cố gắng để lại nhận xét này vì tôi không chắc đây là câu trả lời đúng. Tôi hi vọng cái này giúp được.

+0

Hm..đề xuất tốt, nhưng điều đó cũng ném một lỗi (có thể bởi vì điều đó đòi hỏi phải sử dụng đường dẫn trực tiếp đến một thư viện node_module ... đó là không điển hình trong kinh nghiệm hạn chế của tôi). Tôi sẽ cập nhật câu hỏi để phản ánh những gì tôi đã thử. – user

+0

Bạn có đang làm việc với các mô-đun nút hoặc tệp .js không? Nếu bạn đang làm việc với các tệp .js, những tệp này nằm bên ngoài đường dẫn node_modules của bạn và bạn sẽ sử dụng cú pháp nhập mà tôi đã đề xuất. Nếu sử dụng các mô đun nút, bạn sẽ cài đặt chúng, sau đó nhập chúng như bạn có. Liên kết bạn cung cấp cho mã SwipeableListView cho thấy bạn đang sử dụng các tệp .js. Điều khác bạn có thể muốn điều tra là - tệp SwipeableListView.js có nhập chính xác các phụ thuộc của nó và các phụ thuộc có sẵn hoặc ở đúng vị trí không? Chỉ là một vài suy nghĩ. – MrDMAdev

+0

Các thành phần này (SwipeableListView) nằm trong mô đun nút ReactNative. Vấn đề là tôi không thể nhập thông qua cú pháp nhập typicall ... – user

2

Vui lòng sử dụng tài liệu trong mã về cách sử dụng SwipeableRow.

Tôi sẽ viết tài liệu bên ngoài mã theo thời gian cho phép, nhưng có nhận xét trong mã sẽ giúp bạn bắt đầu.

Cách chung để sử dụng nó là:

  1. Đó là let ds = SwipeableListView.getNewDataSource()
  2. Làm thường cloneWithRowsAndSections(..) như bạn sẽ bất kỳ khác ListView, kiểm tra nguồn gốc của SwipeableListView cho những gì params để cung cấp
  3. Sử dụng SwipeableListView như bạn sẽ ListView; cùng các đạo cụ như ListView với các đạo cụ bổ sung được mô tả trong SwipeableListView.js. renderRow là phần trên cùng có thể vuốt được, renderQuickActions là phần dưới cùng được hiển thị khi được vuốt.

Sau đó, bạn nên sử dụng nó giống như bạn sẽ ListView, ví dụ: một cái gì đó giống như <SwipeableListView renderRow={..} renderQuickActions={..} {..someListViewProps} />

Đó là về nó.

+0

Xin chào Fred, cảm ơn câu trả lời! Bạn có thể vui lòng giải thích cách tôi nhập SwipeableListView ngay từ đầu không? (nhập {???} từ 'phản ứng gốc' ...) Tôi không thể thực hiện bước nhập đó để làm việc - sau đó, tôi vui lòng làm theo hướng dẫn của bạn và tìm hiểu mã, để xem cách các thành phần làm việc ... – user

+2

@ user1370384 Tôi không chắc chắn, tôi chưa bao giờ làm React Native phát triển bên ngoài công việc, nhưng tôi sẽ hỏi và cho bạn biết. – Fred

Các vấn đề liên quan