Jump to content
php.lv forumi

Ar ko labak React js


ergocom

Recommended Posts

Man patika react . 

Domaju no Ember js pariet uz react plus Backbone.

Vai kad izmanto React un backbone kopa.

 

pimers 

<!DOCTYPE html>
<html>
  <head>
    <script src="build/react.js"></script>
    <script src="build/JSXTransformer.js"></script>
     <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.2/marked.min.js"></script>
     <style>
         .comment{
             background: goldenrod;
         }
         input{
             display: block;
         }
         .wl{
             width: 400px;
              float: left;
         }
          .wr{
             width: 300px;
             float: left;
             margin-left: 10px;    
         }
     </style>
  </head>
  <body>
      <div id="content"  class="wl"></div>
       <div id="content2"  class="wr"></div>
      <!--<script type="text/jsx" src="src/app.js"></script>-->
     
      <script type="text/jsx">
          
          People = Backbone.Model.extend({
        initialize: function(){
          
        },
    });
    
       var person = new People();
     
    
      var User = React.createClass({
         
        
    render:function(){
        return ( <p>
                <h3>{this.props.data.get('age')} </h3>
                {this.props.data.get('name') }
                </p>);
    }
    });
    
     var UserForm = React.createClass({
    
   handleSubmit: function(e) {
    e.preventDefault();
    var name= React.findDOMNode(this.refs.name).value.trim();
    var age= React.findDOMNode(this.refs.age).value.trim();
    if (!name && !age) {
      return;
    }
    // to server
    this.props.onUserSubmit({name: name,age:parseInt(age,10)});
   
    
    React.findDOMNode(this.refs.name).value = '';
    React.findDOMNode(this.refs.age).value = '';
    return;
  },

  render: function() {
    return (
      <div className="UsertForm">
        <form className="UserForm" onSubmit={this.handleSubmit}>
        <input type="text" placeholder="Your name" ref="name"  />
        <input type="text" placeholder="Your age" ref="age"  />
        <input type="submit" value="Post" />
      </form>
      </div>
    );
  }
});
    
    
 
    
  
          var Facebook = React.createClass({
              getInitialState:function(){
          return {data:person};
        },
        
        load:function(){
           
               
               this.setState({data:person});
                   
              
           
        },
        handleAdd:function(user){
           
             person.set(user);
        },
        
        componentDidMount: function() {
    this.load();
   setInterval(this.load, this.props.time);
    console.log(this.state.data.get('name'))
  },
              render:function(){
                  return(
                       <div>
                      <User data={this.state.data} /> 
                        <UserForm button="Add" onUserSubmit={this.handleAdd} />  
                       </div>
                      
                );
              }
          });
          React.render(<Facebook url="" time={1000}/>,document.getElementById('content2'));
      </script>
      <script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script>
    <script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>
  </body>
</html>

Link to comment
Share on other sites

React ir View bibliotēka un nenoliedzami pašreiz ātrdarbīgākā, pārspējot visas citas ar krietnu atrāvienu.

Vue ir MVVM freimworks, kura View daļa ne tuvu nav tik ātrdarbīga kā React-am, bet efektivitāte tiek panākta ar pietiekami gudru modeļu daļu.

Ja sāksi lietot Vue, tad esi sasiets ar visām tā sastāvdaļā, kamēr React gadījumā, izmanto, kuru modeļu bibliotēku gribi, vai tā būtu Backbone, Immutablejs, native js, u.c.

Tāpat ar React tu vari aplikāciju būvēt MVVM, MVC, Flux un citiem paterniem vai to kombinācijām.

Link to comment
Share on other sites

Vai kāds Reacta guru varētu dot man piemēru, kurā reāli atmaksājas izmantot papildus libu priekš datu slāņa. Kaut vai to pašu Backbone. Es šobrīd visu, lai kas tas arī būtu, vienkārši glabāju State. Un viss notiek.. Varbūt vienkārši nav gadījusies tāda situācija. Nu labi, getInitialState metode lieliem komponentiem man mēdz būt 30 līniju gara, tā iespējams ir zīme, ka kaut ko varētu darīt labāk.

Link to comment
Share on other sites

Props un State izmanto jebkurā gadījumā, tikai svarīgi ir, kas tieši nāk caur šo props un state.

Lai liela izmēra React aplikācija strādātu ātri, ir svarīgi, lai ne tikai pārrenderēšana būtu efektīva, bet arī kompleksākas render funkcijas izsauktos retāk.

To var panākt ar PureRenderMixin, kurš tad, kad iepriekšējais props un state ir vienādi salīdzinot ar "shalow" salīdzināšanu - tātad tikai pirmajā līmenī. Ja dati, kas glabājas ir masīvi vai objekti, tad salīdzinātas tiek attiecīgi reference.

Ja izmanto plain js datu struktūras, tas, lai kokveida datu struktūrā saglabātos iepriekšējās references tiem atzariem, kuri neizmainījās, var lietot React update addonu, bet tas ir diezgan ierobežots savā funkcionalitātē.

Daudz plašāka bibliotēkā ir immutable.js, kuru pareizi izmantojot, var panākt to, ka pat daudz mazāk lieku render funkciju tiek izsaukts.

Otra lieta ir tā, ka ir divu veidu stāvokļi, komponentes lokālie un aplikācijas globālie. Piemēram, entitījas kā users, posts, comments, utml. es glabātu globālā storē, kurai var piekļūt dažādas komponentes, bet lokālus, kas raksturo tikai konkrēto komponenti, pašā komponentē.

Piemēram, ja man būtu komentāru komponente, tad komponente pati glabātu komentāru id koku: [1,2,3,[4,5,6],7,8,[9,10]],

savukārt globālais store glabātu komentāru, lietotāju, u.c. nepieciešamās entitījas, jo tās: 1) var būt vajadzīgas citās komponentēs un, lai, ja kādā nomainās dati, ir tikai viens patiesības avots; 2)Tajā pašā komponentēs var būt tā, ka daudzās vietās izmanto vienu un to pašu entitīju un lai nebūtu liekas kopijas.

Tālāk attiecīgi šīs globālās entitījas var būt arī kaut kas sarežģītāks par vienkāršu native js objektu vai Immutable Mapu. Piemēram, ja komentāros vajag attēlot lietotāja avataru un arhitektūra ir būvēta tā, ka no saiti uz lietotāja avataru var izrēķināt no lietotāja id, tad attiecīgi pie id piekļūs caur user.id, bet pie avatara saites caur user.avatarUrl(). Šeit attiecīgi noder kaut kas sarežģītāks par native js datu struktūrām.

 

 

P.S.:

Šeit informācija par to kā Immutable uzlabo React https://facebook.github.io/react/docs/advanced-performance.html

Edited by codez
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...