Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÉîÈëdz³öReact Native£ºÊ¹ÓÃJavaScript¹¹½¨Ô­ÉúÓ¦ÓÃ
 
×÷Õߣº´ó·ÜÆë À´Ô´£ºColin Eberhardt ·¢²¼ÓÚ 2015-6-5
  3575  次浏览      28
 

ÊýÔÂǰ£¬Facebook ¶ÔÍâÐû²¼ÁËÕýÔÚ¿ª·¢µÄ React Native ¿ò¼Ü£¬Õâ¸ö¿ò¼ÜÔÊÐíÄãʹÓà JavaScript ¿ª·¢Ô­ÉúµÄ iOS Ó¦Ó᪡ª¾ÍÔÚ½ñÌ죬Beta °æµÄ²Ö¿âÊͳöÁË£¡

»ùÓÚ PhoneGap ʹÓà JavaScript ºÍ HTML5 ¿ª·¢ iOS Ó¦ÓÃÒѾ­Óкü¸ÄêÁË£¬ÄÇ React Native ÓÐʲôţµÄ£¿

React Native ÕæµÄºÜÅ££¬Èôó¼ÒÐË·ÜÒì³£µÄÖ÷ÒªÔ­ÒòÓÐÁ½µã£º

1.¿ÉÒÔ»ùÓÚ React NativeʹÓà JavaScript ±àдӦÓÃÂß¼­£¬UI Ôò¿ÉÒÔ±£³ÖÈ«ÊÇÔ­ÉúµÄ¡£ÕâÑùµÄ»°¾ÍûÓбØÒª¾Í HTML5 µÄ UI ×ö³ö³£¼ûµÄÍ×Э£»

2.React ÒýÈëÁËÒ»ÖÖÓëÖÚ²»Í¬µÄ¡¢ÂÔÏÔ¼¤½øµ«¾ß±¸¸ß¿ÉÓÃÐԵķ½°¸À´¹¹½¨Óû§½çÃæ¡£³¤»°¶Ì˵£¬Ó¦ÓÃµÄ UI ¼òµ¥Í¨¹ýÒ»¸ö»ùÓÚÓ¦ÓÃĿǰ״̬µÄº¯ÊýÀ´±í´ï¡£

React Native µÄ¹Ø¼ü¾ÍÊÇ£¬ÒÔ°Ñ React ±à³ÌģʽµÄÄÜÁ¦´øµ½Òƶ¯¿ª·¢À´×÷ΪÖ÷ҪĿ±ê¡£ËüµÄÄ¿±ê²»ÊÇ¿çÆ½Ì¨Ò»´Î±àдµ½´¦Ö´ÐУ¬¶øÊÇÒ»´Îѧϰ¿çƽ̨¿ª·¢¡£Õâ¸öÊÇÒ»¸ö·Ç³£´óµÄÇø±ð¡£ÕâÆª½Ì³ÌÖ»½éÉÜ iOS ƽ̨£¬²»¹ýÄãÒ»µ©ÕÆÎÕÁËÏà¹ØµÄ¸ÅÄ¾Í¿ÉÒÔÓ¦Óõ½ Android ƽ̨£¬¿ìËÙ¹¹½¨ Android Ó¦Óá£

Èç¹û֮ǰֻÓùý Objective-C »òÕß Swift дӦÓõϰ£¬ÄãºÜ¿ÉÄܲ»»á¶ÔʹÓà JavaScript À´±àдӦÓõÄÔ¸¾°¸Ðµ½ÐË·Ü¡£¾¡¹ÜÈç´Ë£¬×÷Ϊһ¸ö Swift ¿ª·¢ÕßÀ´Ëµ£¬ÉÏÃæÌáµ½µÄµÚ¶þµãÓ¦¸Ã¿ÉÒÔ¼¤ÆðÄãµÄÐËȤ£¡

Äãͨ¹ý Swift£¬ºÁÎÞÒÉÎÊѧϰµ½ÁËеĸü¶àÓÐЧµÄ±àÂë·½·¨ºÍ¼¼ÇÉ£¬¹ÄÀø×ª»»ºÍ²»±äÐÔ¡£È»¶ø£¬¹¹½¨ UI µÄ·½Ê½»¹ÊǺÍʹÓà Objective-C µÄ·½Ê½Ò»Ö¡£ÈÔÈ»ÒÔ UIKit Ϊ»ù´¡£¬¶À¶Ïרºá¡£

ͨ¹ýÏñ virtual DOM ºÍ reconciliation ÕâЩÓÐȤµÄ¸ÅÄReact ½«º¯Êýʽ±à³ÌÖ±½Ó´øµ½ÁË UI ²ã¡£

ÕâÆª½Ì³Ì½«´ø×ÅÄãһ·¹¹½¨Ò»¸ö UK ·¿²úËÑË÷Ó¦Óãº

Èç¹ûÄã֮ǰһµã JavaScript ¶¼Ã»Ð´¹ý£¬±ðµ£ÐÄ¡£ÕâÆª½Ì³Ì´ø×ÅÄã½øÐÐÒ»²½Ò»²½½øÐбàÂë¡£React ʹÓà CSS ÊôÐÔÀ´¶¨ÒåÑùʽ£¬Ò»°ã±È½ÏÈÝÒ×¶ÁÒ²±È½ÏÈÝÒ×Àí½â¡£µ«ÊÇÈç¹ûÄãÏëÁ˽â¸ü¶àµÄ»°£¬¿ÉÒÔÈ¥¿´¿´ Mozilla Developer Network reference£¬ºÜ²»´íµÄ¡£

ÏëҪѧϰ¸ü¶à£¬¼ÌÐøÍù϶Á£¡

×¼±¸¹¤×÷

React Native ¿ò¼ÜÍйÜÔÚ GitHub ÉÏ¡£Äã¿ÉÒÔͨ¹ýÁ½ÖÖ·½Ê½»ñÈ¡µ½Ëü£ºÊ¹Óà git ¿Ë¡²Ö¿â£¬»òÕßÏÂÔØÒ»¸ö zip ѹËõ°üÎļþ¡£Èç¹ûÄãµÄ»úÆ÷ÉÏÒѾ­°²×°ÁË React Native£¬ÔÚ×ÅÊÖ±àÂëǰ»¹ÓÐÆäËû¼¸¸öÒòËØÐèÒª¿¼ÂÇ¡£

React Native ½èÖú Node.js£¬¼´ JavaScript ÔËÐÐʱÀ´´´½¨ JavaScript ´úÂë¡£Èç¹ûÄãÒѾ­°²×°ÁË Node.js£¬ÄǾͿÉÒÔÉÏÊÖÁË¡£
Ê×ÏÈ£¬Ê¹Óà Homebrew ¹ÙÍøÌṩµÄÖ¸Òý°²×° Homebrew£¬È»ºóÔÚÖÕ¶ËÖ´ÐÐÒÔÏÂÃüÁ

brew install node

½ÓÏÂÀ´£¬Ê¹Óà homebrew °²×° watchman£¬Ò»¸öÀ´×ÔFacebook µÄ¹Û²ì³ÌÐò£º

brew install watchman

ͨ¹ýÅäÖà watchman£¬React ʵÏÖÁËÔÚ´úÂë·¢Éú±ä»¯Ê±£¬Íê³ÉÏà¹ØµÄÖØ½¨µÄ¹¦ÄÜ¡£¾ÍÏñÔÚʹÓà Xcode ʱ£¬Ã¿´Î±£´æÎļþ¶¼»á½øÐÐÒ»´Î´´½¨¡£

React Native ÓкܶàµÄÒÀÀµ£¬ÐèÒªÔÚÔËÐÐ֮ǰ°²×°ºÃ¡£ÔÚ React Native ÎļþĿ¼Ï´ò¿ªÒ»¸öÖÕ¶Ë£¬Ö´ÐÐÏÂÃæ´úÂ룺

npm install

ÕâÀïͨ¹ý Node °ü¹ÜÀíÆ÷ץȡµ½ÏîÄ¿µÄËùÓÐÒÀÀµ£»¹¦ÄÜÉÏºÍ CocoaPods »òÕß Carthage ÀàËÆ¡£³É¹¦Ö´ÐиÃÃüÁîºó£¬Äã»á·¢ÏÖÒ»¸ö node_modules Îļþ¼Ð±»´´½¨£¬°üº¬Á˸÷ÖÖÍⲿÒÀÀµ¡£

×îºó£¬Æô¶¯¿ª·¢·þÎñÆ÷¡£ÔڸղŴò¿ªµÄÖÕ¶ËÖУ¬Ö´ÐÐÏÂÃæÃüÁ

npm start

Ö´ÐÐÉÏÃæÃüÁÄã»á¿´µ½£º

$ npm start



> react-native@0.1.0 start /Users/colineberhardt/Projects/react-native

> ./packager/packager.sh

| Running packager on port 8081.

| Keep this packager running while developing on any JS

| projects. Feel free to close this tab and run your own

| packager instance if you prefer.

| https://github.com/facebook/react-native
React packager ready.

¾ÍÕâÑù¼òµ¥£¬×¼±¸¿ªÊ¼£¡½Å±¾ÔÚÖն˼ÌÐøÖ´ÐУ¬ÎÒÃǼÌÐø¡£

ÖÁ´Ë£¬ÎÒÍÆ¼ö³¢ÊÔÒ»¸ö React Native ʾÀýÀ´²âÊÔÅäÖÃÏî¡£ÔÚ react-native/Examples/Movies Îļþ¼ÐÏ´ò¿ªÏîÄ¿£¬È»ºó´´½¨²¢ÇÒÔËÐÐËü£¬È·±£Äã¿ÉÒÔÕýÈ·µØ·¢²¼Õâ¸ö Movies Ó¦Óá£

×¢Ò⣺ÔÚ½øÈë±àÂ빤×÷֮ǰ£¬»¹ÓÐ×îºóÒ»¼þÊ ¡ª¡ª ÔÚÕâ¸ö½Ì³ÌÖУ¬ÄãÐèÒª±àд´óÁ¿µÄ JavaScript ´úÂ룬Xcode ²¢·ÇÊÇ×îºÃµÄ¹¤¾ß£¡ÎÒʹÓà Sublime Text£¬Ò»¸ö¼Û¸ñºÏÀíÇÒÓ¦Óù㷺µÄ±à¼­Æ÷¡£²»¹ý£¬atom£¬brackets »òÕ߯äËûÇáÁ¿µÄ±à¼­Æ÷¶¼ÄÜʤÈÎÕâ·Ý¹¤×÷¡£

React Native ÄãºÃ

ÔÚ¿ªÊ¼¡°ËÑ·¿App¡±Ö®Ç°£¬ÏÈÀ´¸ö¼òµ¥µÄ Hello World App ÈÈÈÈÉí¡£ÔÚÕâÒ»½ÚÀÄ㽫»áʹÓõ½Ò»Ð©×é¼þ¡£

ÏÂÔØÆðʼÏîÄ¿£¬½âѹËõµ½react-native/ExamplesĿ¼ÖС£½âѹÍê³Éºó£¬ÔÚXcodeÖдò¿ª PropertyFinder ÏîÄ¿£¬²»ÒªÖ±½ÓÔËÐÐÕâ¸öÏîÄ¿£¬»¹ÐèÒª¼ÓÉÏһЩJS£¡

Ôڱ༭Æ÷Öдò¿ª PropertyFinderApp.js£¬½«ÏÂÃæÕâÐдúÂë¼Óµ½ÎļþµÄ¿ªÍ·Î»Öãº

'use strict';

ÕâÐдúÂëÊÇÓÃÓÚ¿ªÆô Strict Mode£¬Strict modeµÄ´íÎó´¦Àí¿ÉÒÔÓÐËùÌá¸ß£¬JavaScriptµÄһЩÓïÑÔȱÏÝÒ²¿ÉÒÔ±ÜÃâ¡£¼ò¶øÑÔÖ®¾ÍÊÇ£¬JavaScriptÔÚÕâÖÖģʽϹ¤×÷µØ¸üºÃ£¡

×¢Ò⣺ÏëÒªÑо¿Ò»Ï Strict Mode µÄÅóÓÑ£¬ÎÒ»áÍÆ¼öÄãÔĶÁ Jon Resig µÄÎÄÕÂ:¡°ECMAScript 5 Strict Mode, JSON, and More¡±

È»ºó£¬¼ÓÉÏÕâÒ»ÐУº

var React = require('react-native');

Õâ¾ä´úÂëÊǽ« react-native Ä£¿é¼ÓÔØ½øÀ´£¬²¢½«Ëü¸³Öµ¸ø±äÁ¿ React µÄ¡£React Native ʹÓÃͬ Node.js ÏàͬµÄÄ£¿é¼ÓÔØ·½Ê½£ºrequire£¬Õâ¸ö¸ÅÄî¿ÉÒÔµÈͬÓÚ Swift Öеġ°Á´½Ó¿â¡±»òÕß¡°µ¼Èë¿â¡±¡£

×¢Ò⣺ÏëÒªÁ˽â¸ü¶à¹ØÓÚ JavaScript Ä£¿éµÄ֪ʶ£¬ÎÒÍÆ¼öÔĶÁ Addy Osmani дµÄÕâÆªÎÄÕ¡£

ÔÚ require Óï¾äµÄÏÂÃæ£¬¼ÓÉÏÕâÒ»¶Î£º

var styles = React.StyleSheet.create({
text: {
color: 'black',
backgroundColor: 'white',
fontSize: 30,
margin: 80
}
});

ÒÔÉÏ´úÂ붨ÒåÁËÒ»¶ÎÓ¦ÓÃÔÚ ¡°Hello World¡± Îı¾ÉϵÄÑùʽ¡£Èç¹ûÄãÔø½Ó´¥¹ýWeb¿ª·¢£¬ÄÇÄãºÜ¿ÉÄÜÒѾ­·¢ÏÖÁË£ºReact Native ʹÓõÄÊÇ CSS À´¶¨ÒåÓ¦ÓýçÃæµÄÑùʽ¡£

ÏÖÔÚÎÒÃÇÀ´¹Ø×¢Ó¦Óñ¾Éí°É£¡ÒÀÈ»ÊÇÔÚÏàͬµÄÎļþÏ£¬½«ÒÔÏ´úÂëÌí¼Óµ½Ñùʽ´úÂëµÄÏÂÃæ£º

class PropertyFinderApp extends React.Component {
render() {
return React.createElement(React.Text, {style: styles.text}, "Hello World!");
}

Êǵ쬾ÍÊÇ JavaScript class£¡

Àà (class) ÊÇÔÚES6Öб»ÒýÈëµÄ£¬×ÝÈ»JavaScriptÒ»Ö±ÔÚ½ø²½£¬µ«Web¿ª·¢ÕßÊÜÀ§ÓÚ¼æÈÝä¯ÀÀÆ÷µÄ×´¿öÖУ¬²»ÄÜÔõôʹÓÃJSµÄÐÂÌØÐÔ¡£React NativeÔËÐÐÔÚJavaScriptCoreÖÐÊÇ£¬Ò²¾ÍÊÇ˵£¬Äã¿ÉÒÔʹÓÃJSµÄÐÂÌØÐÔÀ²£¬ÍêÈ«²»Óõ£ÐļæÈÝʲôµÄÄØ¡£

×¢Ò⣺Èç¹ûÄãÊÇÒ»Ãû Web ¿ª·¢Õߣ¬ÎÒ°Ù·Ö°Ù¹ÄÀøÄãҪʹÓÃÏÖ´úµÄJavaScript£¬È»ºóʹÓÃÏñ Babel ÕâÑùµÄ¹¤¾ßÉú³É¼æÈÝÐ﵀ JavaScript£¬ÓÃÓÚÖ§³Ö¼æÈÝÐÔ²»ºÃµÄÀÏä¯ÀÀÆ÷¡£

PropertyFinderApp ¼Ì³ÐÁË React.Component£¨React UIµÄ»ù´¡Ä£¿é£©¡£×é¼þ°üº¬×Ų»¿É±äµÄÊôÐÔ£¬¿É±äµÄ״̬±äÁ¿ÒÔ¼°±©Â¶¸øäÖȾÓõķ½·¨¡£Õâ»áÄã×öµÄÓ¦ÓñȽϼòµ¥£¬Ö»ÓÃÒ»¸öäÖȾ·½·¨¾Í¿ÉÒÔÀ²¡£

React Native ×é¼þ²¢²»ÊÇ UIKit À࣬ËüÃÇÖ»ÄÜ˵ÊÇÔÚijÖ̶ֳÈÉϵÈͬ¡£¿ò¼ÜÖ»Êǽ« React ×é¼þÊ÷ת»¯³ÉΪԭÉúµÄUI¡£

×îºóÒ»²½À²£¬½«ÕâÒ»ÐмÓÔÚÎļþĩβ£º

React.AppRegistry.registerComponent('PropertyFinderApp', function() { return PropertyFinderApp });

AppRegistry ¶¨ÒåÁËAppµÄÈë¿Ú£¬²¢ÌṩÁ˸ù×é¼þ¡£

±£´æ PropertyFinderApp.js£¬»Øµ½XcodeÖС£È·±£ PropertyFinder ¹æ»®£¨scheme£©ÒѾ­¹´Ñ¡ÁË£¬²¢ÉèÖÃÁËÏàÓ¦µÄ iPhone Ä£ÄâÆ÷£¬È»ºóÉú³É²¢ÔËÐÐÄãµÄÏîÄ¿¡£¼¸ÃëÖ®ºó£¬ÄãÓ¦¸Ã¾Í¿ÉÒÔ¿´µ½ ¡°Hello World¡± Ó¦ÓÃÕýÔÚÔËÐÐÁË£º

Õâ¸öJavaScriptÓ¦ÓÃÔËÐÐÔÚÄ£ÄâÆ÷ÉÏ£¬Ê¹ÓõÄÊÇÔ­ÉúUI£¬Ã»ÓÐÈκÎÄÚǶµÄä¯ÀÀÆ÷Ŷ£¡

»¹²»ÏàÐÅÕâÊÇÕæµÄ£¿:] ÄÇ´ò¿ªÄãµÄ Xcode£¬Ñ¡Ôñ Debug\View Debugging\Capture View Hierarchy£¬Äã¿´ native view hierarchy Öж¼Ã»ÓÐ UIWebView£¬¾ÍÖ»ÓÐÒ»¸öÔ­ÉúµÄview£¡:]

ÄãÒ»¶¨ºÜºÃÆæÆäÖеÄÔ­Àí°É£¬ÄǾÍÔÚ Xcode Öдò¿ª AppDelegate.m£¬½Ó×ÅÕÒµ½ application:didFinishLaunchingWithOptions£ºÕâ¸ö·½·¨¹¹½¨ÁË RCTRootView ÓÃÓÚ¼ÓÔØ JavaScript Ó¦ÓÃÒÔ¼°äÖȾ×îºóµÄÊÓͼµÄ¡£

µ±Ó¦ÓÿªÊ¼ÔËÐеÄʱºò£¬RCTRootView½«»á´ÓÒÔϵÄURLÖмÓÔØÓ¦Óãº

http://localhost:8081/Examples/PropertyFinder/PropertyFinderApp.includeRequire.runModule.bundle

ÖØÐµ÷ÓÃÁËÄãÔÚÔËÐÐÕâ¸öAppʱ´ò¿ªµÄÖÕ¶Ë´°¿Ú£¬Ëü¿ªÆôÁËÒ»¸ö packager ºÍ server À´´¦ÀíÉÏÃæµÄÇëÇó¡£

ÔÚ Safari Öдò¿ªÄǸö URL£»Ä㽫»á¿´µ½Õâ¸ö App µÄ JavaScript ´úÂë¡£ÄãÒ²¿ÉÒÔÔÚ React Native ¿ò¼ÜÖÐÕÒµ½ÄãµÄ ¡°Hello World¡± ´úÂë¡£

µ±ÄãµÄApp¿ªÊ¼ÔËÐÐÁËÒÔºó£¬Õâ¶Î´úÂ뽫»á±»¼ÓÔØ½øÀ´£¬È»ºó JavaScriptCore ¿ò¼Ü½«»áÖ´ÐÐËü¡£ÔÚ Hello World µÄÀý×ÓÀËü½«»á¼ÓÔØ PropertyFinderApp ×é¼þ£¬È»ºó¹¹½¨³öÔ­ÉúµÄ UIKit ÊÓͼ¡£¹ØÓÚÕⲿ·ÖµÄÄÚÈÝ£¬ºóÎÄÀï»áÔÙÏêϸ½âÊ͵ġ£

ÄãºÃ JSX µÄÊÀ½ç

Ä㵱ǰµÄÓ¦ÓóÌÐò»áʹÓà React.createElement À´¹¹½¨Ó¦Óà UI ,React»á½«Æäת»»µ½Ô­Éú»·¾³ÖС£ÔÚµ±Ç°Çé¿öÏ£¬ÄãµÄJavaScript´úÂëÊÇÍêÈ«¿É¶ÁµÄ,µ«Ò»¸ö¸ü¸´Ô UI ÓëǶÌ×µÄÔªËØ½«Ñ¸ËÙʹ´úÂë±ä³ÉÒ»´óÛç¡£

È·±£Ó¦ÓóÌÐòÈÔÔÚÔËÐÐ,È»ºó»Øµ½ÄãµÄÎı¾±à¼­Æ÷ÖУ¬±à¼­ PropertyFinderApp.js ¡£ÐÞ¸Ä×é¼þ render ·½·¨µÄ·µ»ØÓï¾äÈçÏÂ:

return <React.Text style={styles.text}>Hello World (Again)</React.Text>;

ÕâÊÇ JSX £¬»ò JavaScript Óï·¨À©Õ¹,ËüÖ±½ÓÔÚÄãµÄ JavaScript ´úÂëÖлìºÏÁËÀàËÆ HTML µÄÓï·¨;Èç¹ûÄãÊÇÒ»¸ö web ¿ª·¢ÈËÔ±,Ó¦¸Ã¶Ô´Ë²»Ä°Éú¡£ÔÚ±¾ÆªÎÄÕÂÖÐÄ㽫һֱʹÓà JSX ¡£

°ÑÄãµÄ¸Ä¶¯±£´æµ½ PropertyFinderApp.js ÖУ¬²¢·µ»Øµ½Ä£ÄâÆ÷¡£°´Ï Cmd + R ,Ä㽫¿´µ½ÄãµÄÓ¦ÓóÌÐòË¢ÐÂ,²¢ÏÔʾ¸üеÄÏûÏ¢ ¡°Hello World(again)¡±¡£

ÖØÐÂÔËÐÐÒ»¸ö React Native Ó¦ÓóÌÐòÏñˢРweb ä¯ÀÀÆ÷Ò»Ñù¼òµ¥!:]

ÒòΪÄã»áʹÓÃÏàͬµÄһϵÁÐ JavaScript Îļþ,Äú¿ÉÒÔÈÃÓ¦ÓóÌÐòÒ»Ö±ÔËÐÐ,Ö»ÔÚ¸ü¸ÄºÍ±£´æ PropertyFinderApp.js ºóˢм´¿É

×¢Òâ:Èç¹ûÄã¸Ðµ½ºÃÆæ,¿ÉÒÔ¿´¿´ÄãµÄ¡°°ü¡±ÔÚä¯ÀÀÆ÷ÖУ¬JSX±»×ª»»³Éʲô¡£

Õâ¸ö ¡°Hello World¡± ÒѾ­¹»´ó¼ÒÍæË£ÁË,ÊÇʱºò¹¹½¨Êµ¼ÊµÄÓ¦ÓóÌÐòÁË!

Ìí¼Óµ¼º½

ÎÒÃǵķ¿²ú²éÕÒÓ¦ÓÃʹÓñê×¼µÄջʽµ¼º½£¬»ùÓÚ UIKit µÄ navigation controller¡£ÏÖÔÚÕýÊÇÌí¼ÓµÄʱºò¡£

ÔÚ index.ios.js ÎļþÖУ¬°Ñ PropertyFinderApp ÖØÃüÃûΪHelloWorld£º

class HelloWorld extends React.Component {

¡°Hello World¡± Õ⼸¸ö×ÖÄ㻹ÐèÒªÈÃËüÏÔʾһ»á¶ù£¬µ«Ëü²»ÔÙÊÇÓ¦Óõĸù×é¼þÁË¡£

½ÓÏÂÀ´£¬ÔÚ HelloWorld Õâ¸ö×é¼þÏÂÃæÌí¼ÓÈçÏÂÕâ¸öÀࣺ

class PropertyFinderApp extends React.Component {

render() {

return (


);

}

}

¹¹ÔìÒ»¸ö navigation controller£¬Ó¦ÓÃÒ»¸öÑùʽ£¬²¢°Ñ³õʼ·ÓÉÉèΪ Hello World ×é¼þ¡£ÔÚ Web ¿ª·¢ÖУ¬Â·ÓɾÍÊÇÒ»ÖÖ¶¨ÒåÓ¦Óõ¼º½µÄÒ»ÖÖ¼¼Êõ£¬¼´¶¨ÒåÒ³Ãæ¡ª¡ª»òÕß˵ÊÇ·ÓÉ¡ª¡ªÓë URL µÄ¶ÔÓ¦¹ØÏµ¡£

ÔÚͬһ¸öÎļþÖУ¬¸üÐÂÑùʽ¶¨Ò壬°üº¬ÈçÏ container µÄÑùʽ£º

var styles = React.StyleSheet.create({
text: {
color: 'black',
backgroundColor: 'white',
fontSize: 30,
margin: 80
},
container: {
flex: 1
}
});

ÔÚËæºóµÄ½Ì³ÌÖÐ»á¸æËßÄã flex: 1 ÊÇʲôÒâ˼¡£

»Øµ½Ä£ÄâÆ÷£¬Cmd+R£¬¿´¿´Ð UI µÄÑù×Ó£º

Õâ¾ÍÊǰüº¬ÁË root view µÄ navigation controller£¬Ä¿Ç° root view ¾ÍÊÇ ¡°Hello World¡±¡£ºÜ°ô¡ª¡ªÓ¦ÓÃÒѾ­ÓÐÁË»ù´¡µÄµ¼º½½á¹¹£¬µ½Ìí¼ÓÕæÊµ UI µÄʱºòÁË¡£

´´½¨ËÑË÷Ò³

ÔÚÏîÄ¿ÖÐÌí¼ÓÒ»¸öÐÂÎļþ£¬ÃüÃûΪ SearchPage.js£¬È»ºó½«Æä·ÅÔÚPropertyFinderApp.js ËùÔÚĿ¼Ï¡£ÔÚÎļþÖÐÌí¼ÓÏÂÃæ´úÂ룺

'use strict';
var React = require('react-native');
var {
StyleSheet,
Text,
TextInput,
View,
TouchableHighlight,
ActivityIndicatorIOS,
Image,
Component
} = React;

Äã»á×¢Òâµ½£¬Î»ÓÚÒýÈë react-native ËùÔÚλÖõÄÇ°ÃæÓÐÒ»¸öÑϸñģʽ±êʶ£¬½ô½Ó×ŵÄÉùÃ÷Óï¾äÊÇÐÂ֪ʶ¡£

ÕâÊÇÒ»Öֽ⹹¸³Öµ£¬×¼ÐíÄã»ñÈ¡¶ÔÏóµÄ¶à¸öÊôÐÔ²¢ÇÒʹÓÃÒ»ÌõÓï¾ä½«ËüÃǸ³¸ø¶à¸ö±äÁ¿¡£½á¹ûÊÇ£¬ºóÃæµÄ´úÂëÖпÉÒÔÊ¡ÂÔµô React ǰ׺£»±ÈÈ磬Äã¿ÉÒÔÖ±½ÓÒýÓà StyleSheet £¬¶ø²»ÔÙÐèÒª React.StyleSheet¡£½â¹¹Í¬ÑùÊÊÓÃÓÚ²Ù×÷Êý×飬¸ü¶àϸ½ÚÇë´ÁÕâÀï¡£

¼ÌÐøÔÚ SearchPage.js ÎļþÖÐÌí¼ÓÏÂÃæµÄÑùʽ£º

var styles = StyleSheet.create({
description: {
marginBottom: 20,
fontSize: 18,
textAlign: 'center',
color: '#656565'
},
container: {
padding: 30,
marginTop: 65,
alignItems: 'center'
}
});

ͬÑù£¬ÒÔÉ϶¼ÊDZê×¼µÄ CSS ÊôÐÔ¡£ºÍ Interface Builder Ïà±È£¬ÕâÑùÉèÖÃÑùʽȱÉÙÁË¿ÉÊÓ»¯£¬µ«ÊÇ±ÈÆðÔÚ viewDidLoad() ÖÐÖð¸öÉèÖÃÊÓͼÊôÐÔµÄ×ö·¨¸üÓѺã¡

Ö»ÐèÒª°Ñ×é¼þÌí¼Óµ½ÑùʽÉùÃ÷µÄÇ°Ãæ£º

class SearchPage extends Component {
render() {
return (
Search for houses to buy!
Search by place-name, postcode or search near your location.
);
}
}

render ºÜºÃµØÕ¹Ê¾³ö JSX ÒÔ¼°Ëü±íʾµÄ½á¹¹¡£Í¨¹ýÕâ¸öÑùʽ£¬Äã¿ÉÒÔÇáÒ×µØÃè»æ³ö×é¼þ UI µÄ½á¹¹£ºÒ»¸öÈÝÆ÷£¬°üº¬Á½¸ö text ±êÇ©¡£

×îºó£¬½«ÏÂÃæµÄ´úÂëÌí¼Óµ½Îļþĩβ£º

module.exports = SearchPage;

Õâ¿ÉÒÔ export SearchPage À࣬·½±ãÔÚÆäËûÎļþÖÐʹÓÃËü¡£

ÏÂÒ»²½ÊǸüÐÂÓ¦ÓõÄ·ÓÉ£¬ÒÔ³õʼ»¯Â·ÓÉ¡£

´ò¿ª PropertyFinderApp.js£¬ÔÚÎļþ¶¥²¿½ô½Ó×ÅÉÏÒ»¸ö require Óï¾äµÄλÖÃÌí¼ÓÏÂÃæ´úÂ룺

var SearchPage = require('./SearchPage');

ÔÚ PropertyFinderApp ÀàµÄ render º¯ÊýÄÚ²¿£¬Í¨¹ý¸üРinitialRoute À´ÒýÓÃ×îÐÂÌí¼ÓµÄÒ³Ãæ£¬ÈçÏ£º

component: SearchPage

´Ëʱ£¬Èç¹ûÄãÔ¸ÒâÔò¿ÉÒÔÒÆ³ý HelloWorld ÀàÒÔ¼°ÓëËüÏà¹ØÁªµÄÑùʽ¡£Äã²»ÔÚÐèÒªÄǶδúÂëÁË¡£

Çл»µ½Ä£ÄâÆ÷£¬°´Ï Cmd+R ²é¿´Ð嵀 UI£º

ʹÓà Flexbox ¶¨ÒåÍâ¹Û

ÏÖÔÚ£¬ÄãÒѾ­¿´µ½ÁËÓûù±¾µÄ CSS ÊôÐÔÀ´¿ØÖÆÍâ¼ä¾à£¨margin£©£¬ÄÚ¼ä¾à£¨padding£©»¹ÓÐÑÕÉ«£¨color£©¡£²»¹ý£¬¿ÉÄÜÄ㻹²»Ì«Á˽âÒªÈçºÎʹÓÃÉìËõºÐ£¨flexbox£©£¬flexbox ÊÇ×î½üмÓÈë CSS ¹æ·¶£¬ÓÃËü¾ÍÄܱܺãÀûµØ²¼¾Ö½çÃæ¡£

React Native Óà css-layout£¨ÕâÊÇÒ»¸öÓà JavaScript ʵÏÖflexbox±ê׼Ȼºó±àÒë³É C£¨iOSƽ̨£©»òÕßJava£¨Androidƽ̨£©µÄ¿â)¡£

Facebook°ÑÕâ¸öÏîÄ¿µ¥¶À³öÀ´ÊµÔÚÌ«ÕýÈ·ÁË£¬ÕâÑù¿ÉÒÔ±àÒë³É¶àÖÖÓïÑÔ£¬´Ù½ø¸ü¶àÐÂÓ±µÄÓ¦Óõķ¢Õ¹£¬±ÈÈçflexbox layout to SVG¡£

ÔÚÄãµÄAppÖУ¬ÈÝÆ÷£¨container£©Ä¬ÈϵØÊÇ×ÝÏò²¼¾Ö£¬Ò²¾ÍÊÇ˵ÔÚËüµÄ×ÓÔªËØ½«»áÊúÖ±µØÅÅÁУ¬ÏñÕâÑù£º

Õâ±»³ÆÎªÖ÷Öá (main axis)£¬ËüµÄ·½Ïò¿ÉÒÔÊÇÊúÖ±µÄÒ²¿ÉÒÔÊÇˮƽµÄ¡£

ÿһ¸ö×ÓÔªËØÔÚÊúÖ±·½ÏòÉϵÄλÖÃÊÇÓÉËüµÄmargin£¬heightºÍpadding¹²Í¬¾ö¶¨µÄ¡£ÈÝÆ÷µÄ alignItems ÊôÐÔÒ²ÒªÉèÖÃ³É center£¬Õâ¸öÊôÐÔ¿ÉÒÔ¿ØÖÆ×ÓÔªËØÔÚÊ®×ÖÖáÉϵÄλÖá£ÔÚÕâÀËüʵÏÖÁ˾ÓÖÐ¶ÔÆëµÄÎı¾¡£

ºÃÀ²£¬ÏÖÔÚÎÒÃǰÑÊäÈë¿òºÍ°´Å¥¼ÓÉÏÈ¥°É¡£´ò¿ª SearchPage.js£¬½«ÏÂÃæµÄ´úÂë²åÈëµÚ¶þ¸ö Text ÔªËØµÄºóÃæ£º

<View style={styles.flowRight}>

<TextInput

style={styles.searchInput}

placeholder='Search via name or postcode'/>

<TouchableHighlight style={styles.button}

underlayColor='#99d9f4'>

<Text style={styles.buttonText}>Go</Text>

</TouchableHighlight>

</View>

<TouchableHighlight style={styles.button}

underlayColor='#99d9f4'>

<Text style={styles.buttonText}>Location</Text>

</TouchableHighlight>

ÏÖÔÚÄãÒѾ­¼ÓÉÏÁËÁ½¸ö×î¸ßµÈ¼¶µÄÊÓͼ£¨top-level view£©£¬Ò»¸öÊÓͼ°üº¬ÁËÎı¾ÊäÈë¿òºÍÒ»¸ö°´Å¥£¬»¹ÓÐÒ»¸öÊÓͼÄÚÖ»ÓÐÒ»¸ö°´Å¥¡£ÔÚºóÎÄÖÐÄã»á¿´µ½£¬ËüÃǵÄÑùʽÊÇʲôÑùµÄ¡£

½Ó×Å£¬Ìí¼ÓÉ϶ÔÓ¦µÄÑùʽ£º

flowRight: {
flexDirection: 'row',
alignItems: 'center',
alignSelf: 'stretch'
},
buttonText: {
fontSize: 18,
color: 'white',
alignSelf: 'center'
},
button: {
height: 36,
flex: 1,
flexDirection: 'row',
backgroundColor: '#48BBEC',
borderColor: '#48BBEC',
borderWidth: 1,
borderRadius: 8,
marginBottom: 10,
alignSelf: 'stretch',
justifyContent: 'center'
},
searchInput: {
height: 36,
padding: 4,
marginRight: 5,
flex: 4,
fontSize: 18,
borderWidth: 1,
borderColor: '#48BBEC',
borderRadius: 8,
color: '#48BBEC'
}

ҪעÒâ¸ñʽÎÊÌ⣺ÿһ¸öÑùʽ¶¼ÊÇÓöººÅ·Ö¸ô¿ªµÄ£¬ËùÒÔ±ðÍüÁËÔÚcontainer Ñ¡ÔñÆ÷ºóÃæ»¹Òª¼ÓÉÏÒ»¸ö¶ººÅ¡£

ÒÔÉϵÄÑùʽ½«»áÓ¦ÓÃÔÚÄã¸Õ¸Õ¼ÓÉϵÄÊäÈë¿òºÍ°´Å¥ÉÏ¡£

ÏÖÔÚ·µ»Øµ½Ä£ÄâÆ÷£¬È»ºó°´Ï Cmd+R ˢнçÃæ£º

Îı¾ÇøÓòºÍ ¡¯Go¡¯ °´Å¥ÔÚͬһÐУ¬²»ÐèÒªÏÔʽµØ¶¨ÒåÁ½¸ö×é¼þµÄ¿í¶È£¬ÄãÖ»ÐèÒª½«ËüÃÇ·ÅÔÚͬһ¸öÈÝÆ÷ÖУ¬¼ÓÉÏ flexDirection:'row' Ñùʽ£¬ÔÙ¶¨ÒåºÃËüÃÇµÄ flex Öµ¡£Îı¾ÇøÓòÊÇ flex:4£¬°´Å¥ÔòÊÇ flex:1£¬Õâ˵Ã÷Á½ÕߵĿí¶È±ÈÊÇ4:1¡£

´ó¸ÅÄãÒ²·¢ÏÖÁË£¬ÄãµÄ¡°°´Å¥¡±Æäʵ²¢²»Êǰ´Å¥£¡:] ʹÓÃÁË UIKit ºó£¬°´Å¥¸üÇãÏòÓÚÊÇ¿ÉÒÔÇáÅö£¨tap£©µÄ±êÇ©£¨label£©£¬ËùÒÔ React Native ÍŶӾö¶¨Ö±½ÓÔÚ JavaScript Öй¹½¨°´Å¥ÁË¡£ËùÒÔÄãÔÚ App ÖÐʹÓõİ´Å¥ÊÇ TouchableHighlight£¬ÕâÊÇÒ»¸ö React Native ×é¼þ£¬µ±ÇáÅö TouchableHighlight ʱ£¬Ëü»á±äµÃ͸Ã÷´Ó¶øÏÔʾ³ö³Äµ×µÄÑÕÉ«£¨Ò²¾ÍÊǰ´Å¥Ï²ãµÄ×é¼þÑÕÉ«£©¡£

ËÑË÷½çÃæµÄ×îºóÒ»²½¾ÍÊǼÓÉÏÒ»ÕÅͼ¡£Äã¿ÉÒÔ´ÓÕâÀïÏÂÔØÎÒÃÇÓõÄÍ¼Æ¬ËØ²Ä²¢½âѹ¡£

ÔÚXcodeÖдò¿ªImages.xcassetsÎļþ£¬µã»÷¼ÓºÅÌí¼ÓÒ»¸öеÄͼƬ¼¯¡£È»ºó½«Í¼Æ¬ËزÄÍϽøÕýÈ·µÄ¡°Çø¼ä¡±£º

ÄãÐèÒªÖØÆôÓ¦ÓòÅÄÜÈÃͼƬÉúЧ¡£

½«ÒÔÏ´úÂëÌí¼Óµ½ TouchableHighlight ×é¼þºóÃæ£¬Ëü½«ÓÃÓÚ¡°»ñȡλÖá±°´Å¥£º

<Image source={require('image!house')} style={styles.image}/>

ÏÖÔÚÔÙÑùʽ±íµÄ×îºó¼ÓÉÏͼƬ¶ÔÓ¦µÄÑùʽ£¬±ðÍüÁ˸øÔ­ÑùʽÖÐ×îºóÒ»¸ö¼ÓÉ϶ººÅŶ£º

image: {

width: 217,

height: 138

}

require('image!house') Óï¾äÓÃÓÚÈ·¶¨ÔÚÄãÓ¦ÓõÄassetĿ¼ÏµÄͼƬ×ÊÔ´£¬ÔÚ Xcode ÖУ¬Èç¹ûÄãµÄ´ò¿ªÁË Images.xcassets£¬Äã»á¿´µ½Ò»¸ö¡°·¿ÎÝ¡±µÄͼ±ê£¬ÕýÊÇÉÏÃæ´úÂëÖÐÒýÓõ½µÄ¡£

·µ»Øµ½Ä£ÄâÆ÷£¬Cmd+RË¢ÐÂUI£º

×¢Ò⣺Èç¹ûÄãÕâ»áûÓп´µ½¡°·¿ÎÝ¡±Í¼Æ¬£¬È¡¶ø´úÖ®µÄÊÇÒ»ÕÅ¡°ÕÒ²»µ½×ÊÔ´¡±µÄͼƬ£¬³¢ÊÔÖØÆôpackager£¨Ò²¾ÍÊÇÔÚÖÕ¶ËÀïÊäÈë npm start ÃüÁ¡£

   
3575 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢