4040
4141<!-- rehype:ignore:end-->
4242
43- Getting Started
44- ===
43+ # Getting Started
4544
4645Encapsulated login page components based on ` react-login-page ` basic components are provided for quick installation and use. These components help streamline the process of creating login pages and offer flexible APIs for modifying and packaging these components. Welcome to choose from our encapsulated [ login pages] ( https://uiwjs.github.io/react-login-page ) . We also welcome [ recommendations] ( https://github.com/uiwjs/react-login-page/issues/new/choose ) for more cool login pages, which we will turn into React components.
4746
@@ -66,10 +65,12 @@ const Demo = () => {
6665 return (
6766 < Login>
6867 < Render>
69- {({ fields, buttons, blocks }) => {
68+ {({ fields, buttons, blocks, $$index }) => {
7069 return (
7170 < div>
72- < header> {blocks .logo } {blocks .title }< / header>
71+ < header>
72+ {blocks .logo } {blocks .title }
73+ < / header>
7374 < div>
7475 < label> {fields .username }< / label>
7576 < / div>
@@ -87,14 +88,20 @@ const Demo = () => {
8788 < Login .Block name= " logo" tagName= " span" >
8889 < Logo / >
8990 < / Login .Block >
90- < Login .Block name= " title" tagName= " span" > Login< / Login .Block >
91+ < Login .Block name= " title" tagName= " span" >
92+ Login
93+ < / Login .Block >
9194 < Login .Input name= " username" placeholder= " Please input Username" / >
9295 < Login .Input name= " password" placeholder= " please enter password" / >
93- < Login .Button name= " submit" type= " submit" > Submit< / Login .Button >
94- < Login .Button name= " reset" type= " reset" > Reset< / Login .Button >
96+ < Login .Button name= " submit" type= " submit" >
97+ Submit
98+ < / Login .Button >
99+ < Login .Button name= " reset" type= " reset" >
100+ Reset
101+ < / Login .Button >
95102 < / Login>
96103 );
97- }
104+ };
98105export default Demo ;
99106```
100107
@@ -109,24 +116,32 @@ const Demo = () => {
109116 return (
110117 < Login>
111118 < Render>
112- {({ blocks, extra }, { fields, buttons }) => {
119+ {({ blocks, extra, $$index }, { fields, buttons }) => {
113120 return (
114121 < div>
115- < header> {blocks .logo } {blocks .title }< / header>
116- {fields .sort ((a , b ) => a .index - b .index ).map ((item , idx ) => {
117- return (
118- < div key= {item .name + idx}>
119- < label> {item .children } {extra[item .name ]}< / label>
120- < / div>
121- );
122- })}
123- < div>
124- {buttons .sort ((a , b ) => a .index - b .index ).map ((item , idx ) => {
125- return React .cloneElement (item .children , {
126- ... item .props ,
127- key: item .name + idx,
128- })
122+ < header>
123+ {blocks .logo } {blocks .title }
124+ < / header>
125+ {fields
126+ .sort ((a , b ) => a .index - b .index )
127+ .map ((item , idx ) => {
128+ return (
129+ < div key= {item .name + idx}>
130+ < label>
131+ {item .children } {extra[item .name ]}
132+ < / label>
133+ < / div>
134+ );
129135 })}
136+ < div>
137+ {buttons
138+ .sort ((a , b ) => a .index - b .index )
139+ .map ((item , idx ) => {
140+ return React .cloneElement (item .children , {
141+ ... item .props ,
142+ key: item .name + idx,
143+ });
144+ })}
130145 < / div>
131146 < / div>
132147 );
@@ -135,9 +150,11 @@ const Demo = () => {
135150 < Login .Block name= " logo" tagName= " span" >
136151 < Logo / >
137152 < / Login .Block >
138- < Login .Block name= " title" tagName= " span" > Login< / Login .Block >
153+ < Login .Block name= " title" tagName= " span" >
154+ Login
155+ < / Login .Block >
139156 < Login .Textarea name= " note" >< / Login .Textarea >
140- < Login .Select name= " select" defaultValue= " 1" >
157+ < Login .Select name= " select" defaultValue= " 1" >
141158 < option value= " w" > Choose an item... < / option>
142159 < option value= " 1" > One< / option>
143160 < option value= " 2" > Two< / option>
@@ -149,11 +166,15 @@ const Demo = () => {
149166 < / Login .Input >
150167 < Login .Input name= " username" index= {1 } placeholder= " Please input Username" / >
151168 < Login .Input name= " password" index= {0 } placeholder= " please enter password" / >
152- < Login .Button name= " submit" index= {1 } type= " submit" > Submit< / Login .Button >
153- < Login .Button name= " reset" index= {0 } type= " reset" > Reset< / Login .Button >
169+ < Login .Button name= " submit" index= {1 } type= " submit" >
170+ Submit
171+ < / Login .Button >
172+ < Login .Button name= " reset" index= {0 } type= " reset" >
173+ Reset
174+ < / Login .Button >
154175 < / Login>
155176 );
156- }
177+ };
157178export default Demo ;
158179```
159180
@@ -236,7 +257,7 @@ const Demo = () => {
236257 return (
237258 < Login>
238259 < Render>
239- {({ blocks, fields, extra }, data ) => {
260+ {({ blocks, fields, $$index, extra }, data ) => {
240261 return (
241262 < label>
242263 {fields .checkbox } {extra .checkbox }
@@ -249,7 +270,7 @@ const Demo = () => {
249270 < / Login .Input >
250271 < / Login>
251272 );
252- }
273+ };
253274export default Demo ;
254275```
255276
@@ -333,13 +354,15 @@ export declare const Button: FC<PropsWithChildren<ButtonProps>>;
333354import { Render } from ' react-login-page' ;
334355
335356< Render>
336- {({ fields, buttons, blocks, extra }, data ) => {
357+ {({ fields, buttons, blocks, extra, $$index }, data ) => {
337358 // data.blocks => Array
338359 // data.buttons => Array
339360 // data.fields => Array
340361 return (
341362 < div>
342- < header> {blocks .logo } {blocks .title }< / header>
363+ < header>
364+ {blocks .logo } {blocks .title }
365+ < / header>
343366 < label> {fields .username }< / label>
344367 < label> {fields .password }< / label>
345368 < div>
@@ -349,40 +372,48 @@ import { Render } from 'react-login-page';
349372 < / div>
350373 );
351374 }}
352- < / Render>
375+ < / Render> ;
353376```
354377
355378``` tsx
356379import { FC } from ' react' ;
357380import { RenderStateProps , InitialState } from ' react-login-page' ;
358- export type RenderChildren = {
359- children? : (props : Required <RenderStateProps >, data : InitialState [' data' ]) => React .ReactNode ;
360- } | {
361- children? : React .ReactNode ;
362- };
381+ export type RenderChildren =
382+ | {
383+ children? : (props : Required <RenderStateProps >, data : InitialState [' data' ]) => React .ReactNode ;
384+ }
385+ | {
386+ children? : React .ReactNode ;
387+ };
363388export declare const Render: FC <RenderChildren >;
364389```
365390
366391** ` index ` ** refers to the use of indexes to control the order of controls
367392
368393``` tsx
369394<Render >
370- { ({ blocks , extra }, { fields , buttons }) => {
395+ { ({ blocks , extra , $$index }, { fields , buttons }) => {
371396 return (
372397 <div >
373- <header >{ blocks .logo } { blocks .title } </header >
374- { fields .sort ((a , b ) => a .index - b .index ).map ((item , idx ) => {
375- return <label key = { item .name + idx } >{ item .children } </label >
376- })}
377- <div >
378- { buttons .sort ((a , b ) => a .index - b .index ).map ((item , idx ) => {
379- const child = item .children ;
380- if (! isValidElement (child )) return null ;
381- return cloneElement (child , {
382- ... child .props ,
383- key: item .name + idx ,
384- })
398+ <header >
399+ { blocks .logo } { blocks .title }
400+ </header >
401+ { fields
402+ .sort ((a , b ) => a .index - b .index )
403+ .map ((item , idx ) => {
404+ return <label key = { item .name + idx } >{ item .children } </label >;
385405 })}
406+ <div >
407+ { buttons
408+ .sort ((a , b ) => a .index - b .index )
409+ .map ((item , idx ) => {
410+ const child = item .children ;
411+ if (! isValidElement (child )) return null ;
412+ return cloneElement (child , {
413+ ... child .props ,
414+ key: item .name + idx ,
415+ });
416+ })}
386417 </div >
387418 </div >
388419 );
@@ -397,10 +428,12 @@ import React from 'react';
397428import Login , { Render , Provider , Container , useStore } from ' react-login-page' ;
398429
399430const RenderLoginPage = () => {
400- const { fields , extra , buttons , blocks , data } = useStore ();
431+ const { fields , extra , $$index , buttons , blocks , data } = useStore ();
401432 return (
402433 < Render>
403- < header> {blocks .logo } {blocks .title }< / header>
434+ < header>
435+ {blocks .logo } {blocks .title }
436+ < / header>
404437 < label> {fields .username }< / label>
405438 < label> {fields .password }< / label>
406439 < div>
@@ -409,23 +442,31 @@ const RenderLoginPage = () => {
409442 < / div>
410443 < / Render>
411444 );
412- }
445+ };
413446
414447const Demo = () => {
415448 return (
416449 < Provider>
417450 < Container>
418451 < RenderLoginPage / >
419452 < / Container>
420- < Login .Block name= " logo" tagName= " span" > ⚛️< / Login .Block >
421- < Login .Block name= " title" tagName= " span" > Login< / Login .Block >
453+ < Login .Block name= " logo" tagName= " span" >
454+ ⚛️
455+ < / Login .Block >
456+ < Login .Block name= " title" tagName= " span" >
457+ Login
458+ < / Login .Block >
422459 < Login .Input name= " username" placeholder= " Please input Username" / >
423460 < Login .Input name= " password" placeholder= " please enter password" / >
424- < Login .Button name= " submit" type= " submit" > Submit< / Login .Button >
425- < Login .Button name= " reset" type= " reset" > Reset< / Login .Button >
461+ < Login .Button name= " submit" type= " submit" >
462+ Submit
463+ < / Login .Button >
464+ < Login .Button name= " reset" type= " reset" >
465+ Reset
466+ < / Login .Button >
426467 < / Provider>
427468 );
428- }
469+ };
429470
430471export default Demo ;
431472```
@@ -437,43 +478,57 @@ import React, { isValidElement, cloneElement } from 'react';
437478import Login , { Render , Provider , Container , useStore } from ' react-login-page' ;
438479
439480const RenderLoginPage = () => {
440- const { blocks , data , extra } = useStore ();
481+ const { blocks , data , $$index , extra } = useStore ();
441482 const { fields , buttons } = data;
442483 return (
443484 < Render>
444- < header> {blocks .logo } {blocks .title }< / header>
445- {fields .sort ((a , b ) => a .index - b .index ).map ((item , idx ) => {
446- return < label key= {item .name + idx}> {item .children }< / label>
447- })}
485+ < header>
486+ {blocks .logo } {blocks .title }
487+ < / header>
488+ {fields
489+ .sort ((a , b ) => a .index - b .index )
490+ .map ((item , idx ) => {
491+ return < label key= {item .name + idx}> {item .children }< / label> ;
492+ })}
448493 < div>
449- {buttons .sort ((a , b ) => a .index - b .index ).map ((item , idx ) => {
494+ {buttons
495+ .sort ((a , b ) => a .index - b .index )
496+ .map ((item , idx ) => {
450497 const child = item .children ;
451498 if (! isValidElement (child)) return null ;
452499 return cloneElement (child, {
453500 ... child .props ,
454501 key: item .name + idx,
455- })
456- })}
502+ });
503+ })}
457504 < / div>
458505 < / Render>
459506 );
460- }
507+ };
461508
462509const Demo = () => {
463510 return (
464511 < Provider>
465512 < Container>
466513 < RenderLoginPage / >
467514 < / Container>
468- < Login .Block name= " logo" tagName= " span" > ⚛️< / Login .Block >
469- < Login .Block name= " title" tagName= " span" > Login< / Login .Block >
515+ < Login .Block name= " logo" tagName= " span" >
516+ ⚛️
517+ < / Login .Block >
518+ < Login .Block name= " title" tagName= " span" >
519+ Login
520+ < / Login .Block >
470521 < Login .Input name= " username" index= {1 } placeholder= " Please input Username" / >
471522 < Login .Input name= " password" placeholder= " please enter password" / >
472- < Login .Button name= " submit" index= {1 } type= " submit" > Submit< / Login .Button >
473- < Login .Button name= " reset" type= " reset" > Reset< / Login .Button >
523+ < Login .Button name= " submit" index= {1 } type= " submit" >
524+ Submit
525+ < / Login .Button >
526+ < Login .Button name= " reset" type= " reset" >
527+ Reset
528+ < / Login .Button >
474529 < / Provider>
475530 );
476- }
531+ };
477532
478533export default Demo ;
479534```
0 commit comments