2015-08-24 16 views

Trả lời

3

Biến lưu trữ trong phạm vi toàn cục là một chút chống mẫu trong Phản hồi. React được dự định sẽ được sử dụng với luồng dữ liệu một chiều, có nghĩa là dữ liệu sẽ chuyển từ các thành phần xuống con của chúng. Điều này đạt được thông qua the passing of props.

Để chia sẻ giá trị giữa nhiều chế độ xem, bạn cần lưu trữ dữ liệu trên thành phần gốc được chia sẻ và chuyển nó thành prop HOẶC lưu trữ nó trong một thực thể riêng chịu trách nhiệm quản lý dữ liệu. Trong ReactJS, điều này đạt được thông qua các mẫu như Flux, nhưng tôi không chắc chắn về các tùy chọn cho phản ứng gốc.

+9

Đồng ý rằng đây thường là một mẫu giả mạo, nhưng điều đó không có nghĩa là bạn không bao giờ nên sử dụng hình cầu trong bất kỳ trường hợp nào. Bản thân React Native định nghĩa một biến toàn cầu trong Javascript được gọi là '__DEV__'. Việc này được thực hiện như thế nào và làm thế nào tôi có thể tạo ra một cái gì đó tương tự, ví dụ: '__MYDEV__'?(Có vẻ như điều này có thể không thực hiện được, và gần nhất bạn có thể nhận được là [biến môi trường] (http://stackoverflow.com/questions/33117227/setting-environment-variable-in-react-native).) –

5

Ví dụ: bạn có thể xuất lớp với các thuộc tính tĩnh và sau đó nhập vào đó khi cần.

Trong main.js ví dụ:

export class AppColors { 
    static colors = {main_color: "#FFEB3B", secondary_color: "#FFC107"} 
} 

Trong tập tin khác, nơi cần phải nhận được màu sắc này

import { AppColors } from './main.js'; 

class AnotherPage { 
    constructor() { 
     super(); 
     console.log(AppColors.colors); // youla! You will see your main and secondary colors :) 
    } 
} 
+0

Bạn có thể thêm các phương thức hoặc hàm tĩnh trong AppColors và cách sử dụng nó hay không. – YLS

13

Phạm vi toàn cầu trong Phản ứng Native là biến toàn cầu.

global.foo = foo

Sau đó, bạn có thể sử dụng bất cứ nơi nào global.foo.

Nhưng đừng lạm dụng nó! Theo ý kiến ​​của tôi, phạm vi toàn cầu có thể được sử dụng để lưu trữ cấu hình chung hoặc một cái gì đó tương tự. Chia sẻ các biến giữa các khung nhìn khác nhau, như mô tả của bạn, bạn có thể chọn nhiều giải pháp khác (sử dụng redux, flux hoặc lưu chúng trong một thành phần cao hơn), phạm vi toàn cầu không phải là một lựa chọn tốt.

Thực hành tốt để xác định biến toàn cục là sử dụng tệp js. Ví dụ: global.js:

global.foo = foo; 
global.bar = bar; 

Sau đó, để đảm bảo nó được thực thi khi dự án được khởi tạo. Ví dụ, nhập khẩu các tập tin trong index.js:

import './global.js' 
// other code 

Bây giờ, bạn có thể sử dụng các biến toàn cầu bất cứ nơi nào, và không cần phải nhập khẩu global.js trong mỗi tập tin. Cố gắng không sửa đổi chúng!

+0

Cảm ơn bạn đã chỉ ra điều này, tôi muốn truy cập một số hình ảnh cấu hình từ các thùng chứa phản ứng của tôi cũng như từ các dịch vụ và điều này đã giúp. Tuy nhiên tôi không phải import global.js. Tôi chỉ có thể sử dụng global.foo = foo –

+0

Theo ý kiến ​​của tôi, biến toàn cục không được sửa đổi trong khi ứng dụng đang chạy. Vì vậy, nếu bạn chỉ viết global.foo = foo trong một số thành phần hoặc mã logic, khi bạn muốn sử dụng foo, bạn không chắc chắn nó đã được khởi tạo trước đó. Hoặc có thể ai đó sẽ giao lại foo trong mã khác. Trong global.js, giá trị của tất cả các biến toàn cục là rõ ràng. Nhập khẩu nó trong index.js, để đảm bảo tất cả các biến toàn cầu được xác định, và bạn có thể sử dụng nó ở bất cứ đâu! – Germinate

+0

Điều này có thể được sử dụng cho các chức năng toàn cầu không? – fungusanthrax

0

Bạn có thể lưu trữ các giá trị đó trong trạng thái thành phần gốc. Sau đó, vượt qua các phương thức thay đổi các giá trị đó thông qua các đạo cụ hoặc ngữ cảnh/hoặc giống như @Jakemmarsh được đề xuất - sử dụng phương thức Flux/Redux.

HOẶC, bạn có thể sử dụng AsyncStorage. Nó hữu ích cho việc lưu trữ dữ liệu ứng dụng như mã thông báo và như vậy.

+0

Liên kết thông lượng và Redux bị hỏng ... –

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