Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2968 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  1407  1408  1409  ..  1449  1450  1451  1452  1453  1454
Auteur Sujet :

blabla@web

n°2310168
dd_pak
Posté le 19-01-2018 à 22:59:23  profilanswer
 

Reprise du message précédent :
Ghost et Discourse bienvenue dans le nouveau monde !
Si tu as besoin d'aide ;)

mood
Publicité
Posté le 19-01-2018 à 22:59:23  profilanswer
 

n°2310169
Mevo
Divergent
Posté le 20-01-2018 à 00:32:22  profilanswer
 

dd_pak a écrit :

Ghost et Discourse bienvenue dans le nouveau monde !


+1.
 
BBS, j'avais fait le tour de tout ce que j'ai pu trouver et mon choix s'était arrêté sur DISCOURSE lorsque j'avais ce projet (depuis enterré).

n°2310170
kurtosis
R.oi des Euros
Posté le 20-01-2018 à 08:57:39  profilanswer
 

Là je me rends compte que je suis bientôt quadragénaire BORDEL.

n°2310174
babysnoopy
Posté le 20-01-2018 à 12:17:39  profilanswer
 

kurtosis a écrit :

"When in doubt : Wordpress"
Wordpress pour le statique/blog et FluxBB pour le forum sont toujours de bonnes solutions.


 
FluxBB, la dernière release à 18 mois, la communauté n'a pas l'air hyper active.
Wordpress a aussi un plugin bbpress pour monter un forum, c'est ce service qui pourrait m'intéresser.
phpBB semble être une valeur sûr.
 
Discourse, pas mal ouaih. et c'est responsive design, un bon point.


---------------
Gérez votre épargne avec Avenue Des Investisseurs - École des épargnants alpha
n°2310175
masklinn
í dag viðrar vel til loftárása
Posté le 20-01-2018 à 12:45:34  profilanswer
 

dd_pak a écrit :

Ghost et Discourse bienvenue dans le nouveau monde !
Si tu as besoin d'aide ;)


Discourse est la merde la plus insupportable que je connaisse, je supporte pas les forums discourse, c'est lourd à crever et les interactions sont immondes :/


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2310178
Plam
Bear Metal
Posté le 20-01-2018 à 14:28:43  profilanswer
 

NodeBB est pas trop mal (je l'utilise pour le forum de XO)


---------------
Spécialiste du bear metal
n°2310195
Mevo
Divergent
Posté le 21-01-2018 à 06:35:15  profilanswer
 

masklinn a écrit :


Discourse est la merde la plus insupportable que je connaisse, je supporte pas les forums discourse, c'est lourd à crever et les interactions sont immondes :/


Ah !? Intéressant. Tu peux détailler ce que tu n'aimes pas ? Sur quels forums te bases-tu pour en arriver à cette conclusion ?

n°2310290
TotalRecal​l
Posté le 23-01-2018 à 17:18:21  profilanswer
 

Hello,

 

J'ai une question React niveau ultra débutant [:pseudoman].
Par curiosité j'ai commencé il y a genre 1h à regarder ReactJS. Je n'ai pas suivi de tutos, je suis parti d'un Hello World, à savoir le template par défaut de Microsoft quand on crée un projet MVC Core 2.0 avec react et redux.

 

Le machin comporte un formulaire avec un bouton qui vient incrémenter une variable.
Je me suis dit naïvement "tiens je vais rajouter un bouton pour décrémenter et un bouton pour la RAZ".

 

C'est là que tout dérape :o [:spamafote]

 

Je vous partage les fichiers .tsx (en premier) et .ts (en second)

Code :
  1. import * as React from 'react';
  2. import { Link, RouteComponentProps } from 'react-router-dom';
  3. import { connect } from 'react-redux';
  4. import { ApplicationState }  from '../store';
  5. import * as CounterStore from '../store/Counter';
  6. type CounterProps =
  7.     CounterStore.CounterState
  8.     & typeof CounterStore.actionCreators
  9.     & RouteComponentProps<{}>;
  10. class Counter extends React.Component<CounterProps, {}> {
  11.     public render() {
  12.         return <div>
  13.             <h1>Counter</h1>
  14.             <p>This is a simple example of a React component.</p>
  15.             <p>Current count: <strong>{ this.props.count }</strong></p>
  16.             <button onClick={() => { this.props.increment() }}>Increment</button>
  17.             <button onClick={() => { this.props.decrement() }}>Decrement</button>
  18.             <button onClick={() => { this.props.reset() }}>Reset count</button>
  19.         </div>;
  20.     }
  21. }
  22. export default connect(
  23.     (state: ApplicationState) => state.counter,
  24.     CounterStore.actionCreators               
  25. )(Counter) as typeof Counter;
 
Code :
  1. import { Action, Reducer } from 'redux';
  2. export interface CounterState {
  3.     count: number;
  4. }
  5. interface IncrementCountAction { type: 'INCREMENT_COUNT' }
  6. interface DecrementCountAction { type: 'DECREMENT_COUNT' }
  7. interface ResetCountAction { type: 'RESET_COUNT' }
  8. type KnownAction = IncrementCountAction | DecrementCountAction | ResetCountAction;
  9. export const actionCreators =
  10. {
  11.     increment: () => <IncrementCountAction>{ type: 'INCREMENT_COUNT' },
  12.     decrement: () => <DecrementCountAction>{ type: 'DECREMENT_COUNT' },
  13.     reset: () => <ResetCountAction>{ type: 'RESET_COUNT' },
  14. };
  15. export const reducer: Reducer<CounterState> = (state: CounterState, action: KnownAction) => {
  16.     switch (action.type) {
  17.         case 'INCREMENT_COUNT':
  18.             return { count: state.count + 1 };
  19.         case 'DECREMENT_COUNT':
  20.             return { count: state.count - 1 };
  21.         case 'RESET_COUNT':
  22.             state.count = -1;
  23.             return { count: state.count + 1 };
  24.         default:
  25.             // The following line guarantees that every action in the KnownAction union has been covered by a case above
  26.             const exhaustiveCheck: never = action;
  27.     }
  28.     return state || { count: 0 };
  29. };
 

Mon problème est dans le .ts lignes 43 à 45 : vous n'aurez pas manqué l'horrible chose que je suis obligé de faire pour ramener à 0 ma variable.
       

Code :
  1. case 'RESET_COUNT':
  2.             state.count = -1;
  3.             return { count: state.count + 1 };


C'est très moche mais c'est tout ce qui fonctionne.
   
Si à la place j'écris :

Code :
  1. case 'RESET_COUNT':
  2.             state.count = 0;
  3.             return { count: state.count };


Ou

Code :
  1. case 'RESET_COUNT':
  2.             return { count: state.count = 0 };
 

Ca s'exécute bien mais dans ce cas, dans ma phrase Current count: <strong>{ this.props.count }</strong> la valeur affichée ne change pas lors du clic sur Reset.
Mais il semble que le 0 soit bien pris en compte, car si je clique sur Increment ou Decrement, la valeur repart bien de 0.

 

Pourtant on devrait pouvoir affecter une constante à une variable liée à l'état donc je ne comprend pas pourquoi ce comportement bizarre. Encore une fois je n'ai jamais fait de React et j'ai un niveau misérable en JS pur, merci de votre indulgence :o.

 

PS : désolé c'est verbeux mais la partie significative tient en très peu de lignes [:spamafote].

 

Merci :jap:

Message cité 3 fois
Message édité par TotalRecall le 23-01-2018 à 17:23:16

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2310296
kao98
...
Posté le 23-01-2018 à 17:56:50  profilanswer
 

TotalRecall a écrit :

Hello,

 

J'ai une question React niveau ultra débutant [:pseudoman].
Par curiosité j'ai commencé il y a genre 1h à regarder ReactJS. Je n'ai pas suivi de tutos, je suis parti d'un Hello World, à savoir le template par défaut de Microsoft quand on crée un projet MVC Core 2.0 avec react et redux.

 

Le machin comporte un formulaire avec un bouton qui vient incrémenter une variable.
Je me suis dit naïvement "tiens je vais rajouter un bouton pour décrémenter et un bouton pour la RAZ".

 

C'est là que tout dérape :o [:spamafote]

 

Je vous partage les fichiers .tsx (en premier) et .ts (en second)

Code :
  1. import * as React from 'react';
  2. import { Link, RouteComponentProps } from 'react-router-dom';
  3. import { connect } from 'react-redux';
  4. import { ApplicationState } from '../store';
  5. import * as CounterStore from '../store/Counter';
  6. type CounterProps =
  7. CounterStore.CounterState
  8. & typeof CounterStore.actionCreators
  9. & RouteComponentProps<{}>;
  10. class Counter extends React.Component<CounterProps, {}> {
  11. public render() {
  12. return <div>
  13. <h1>Counter</h1>
  14. <p>This is a simple example of a React component.</p>
  15. <p>Current count: <strong>{ this.props.count }</strong></p>
  16. <button onClick={() => { this.props.increment() }}>Increment</button>
  17. <button onClick={() => { this.props.decrement() }}>Decrement</button>
  18. <button onClick={() => { this.props.reset() }}>Reset count</button>
  19. </div>;
  20. }
  21. }
  22. export default connect(
  23. (state: ApplicationState) => state.counter,
  24. CounterStore.actionCreators
  25. )(Counter) as typeof Counter;
 
Code :
  1. import { Action, Reducer } from 'redux';
  2. export interface CounterState {
  3. count: number;
  4. }
  5. interface IncrementCountAction { type: 'INCREMENT_COUNT' }
  6. interface DecrementCountAction { type: 'DECREMENT_COUNT' }
  7. interface ResetCountAction { type: 'RESET_COUNT' }
  8. type KnownAction = IncrementCountAction | DecrementCountAction | ResetCountAction;
  9. export const actionCreators =
  10. {
  11. increment: () => <IncrementCountAction>{ type: 'INCREMENT_COUNT' },
  12. decrement: () => <DecrementCountAction>{ type: 'DECREMENT_COUNT' },
  13. reset: () => <ResetCountAction>{ type: 'RESET_COUNT' },
  14. };
  15. export const reducer: Reducer<CounterState> = (state: CounterState, action: KnownAction) => {
  16. switch (action.type) {
  17. case 'INCREMENT_COUNT':
  18. return { count: state.count + 1 };
  19. case 'DECREMENT_COUNT':
  20. return { count: state.count - 1 };
  21. case 'RESET_COUNT':
  22. state.count = -1;
  23. return { count: state.count + 1 };
  24. default:
  25. // The following line guarantees that every action in the KnownAction union has been covered by a case above
  26. const exhaustiveCheck: never = action;
  27. }
  28. return state || { count: 0 };
  29. };
 

Mon problème est dans le .ts lignes 43 à 45 : vous n'aurez pas manqué l'horrible chose que je suis obligé de faire pour ramener à 0 ma variable.

 
Code :
  1. case 'RESET_COUNT':
  2. state.count = -1;
  3. return { count: state.count + 1 };


C'est très moche mais c'est tout ce qui fonctionne.

 

Si à la place j'écris :

Code :
  1. case 'RESET_COUNT':
  2. state.count = 0;
  3. return { count: state.count };


Ou

Code :
  1. case 'RESET_COUNT':
  2. return { count: state.count = 0 };
 

Ca s'exécute bien mais dans ce cas, dans ma phrase Current count: <strong>{ this.props.count }</strong> la valeur affichée ne change pas lors du clic sur Reset.
Mais il semble que le 0 soit bien pris en compte, car si je clique sur Increment ou Decrement, la valeur repart bien de 0.

 

Pourtant on devrait pouvoir affecter une constante à une variable liée à l'état donc je ne comprend pas pourquoi ce comportement bizarre. Encore une fois je n'ai jamais fait de React et j'ai un niveau misérable en JS pur, merci de votre indulgence :o.

 

PS : désolé c'est verbeux mais la partie significative tient en très peu de lignes [:spamafote].

 

Merci :jap:


Code :
  1. Return {count: 0}



---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2310297
masklinn
í dag viðrar vel til loftárása
Posté le 23-01-2018 à 18:20:34  profilanswer
 

TotalRecall a écrit :

Hello,  
 
Mon problème est dans le .ts lignes 43 à 45 : vous n'aurez pas manqué l'horrible chose que je suis obligé de faire pour ramener à 0 ma variable.
         

Code :
  1. case 'RESET_COUNT':
  2.             state.count = -1;
  3.             return { count: state.count + 1 };


C'est très moche mais c'est tout ce qui fonctionne.
   
Si à la place j'écris :  

Code :
  1. case 'RESET_COUNT':
  2.             state.count = 0;
  3.             return { count: state.count };


Ou

Code :
  1. case 'RESET_COUNT':
  2.             return { count: state.count = 0 };


 
Ca s'exécute bien mais dans ce cas, dans ma phrase Current count: <strong>{ this.props.count }</strong> la valeur affichée ne change pas lors du clic sur Reset.
Mais il semble que le 0 soit bien pris en compte, car si je clique sur Increment ou Decrement, la valeur repart bien de 0.
 
Pourtant on devrait pouvoir affecter une constante à une variable liée à l'état donc je ne comprend pas pourquoi ce comportement bizarre. Encore une fois je n'ai jamais fait de React et j'ai un niveau misérable en JS pur, merci de votre indulgence :o.
 
PS : désolé c'est verbeux mais la partie significative tient en très peu de lignes [:spamafote].
 
Merci :jap:


Je connais pas redux (et c'est plus un problème redux que react) mais t'es généralement pas censé modifier l'état en place. Pourquoi tu renvoies pas juste {count:0}?


Message édité par masklinn le 23-01-2018 à 18:21:48

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 23-01-2018 à 18:20:34  profilanswer
 

n°2310298
TotalRecal​l
Posté le 23-01-2018 à 18:26:05  profilanswer
 

Mais je ne suis pas sensé faire un truc avec mon objet "state" (comme les autres méthodes) ?
Genre éventuellement :
   state.count = 0;
   return {count: 0}

 

Sinon il me semblait avoir aussi déjà testé  le return {count: 0} mais sans aucune différence, je reverrai.
Merci

Message cité 2 fois
Message édité par TotalRecall le 23-01-2018 à 18:26:27

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2310299
kao98
...
Posté le 23-01-2018 à 18:44:27  profilanswer
 

Je connais pas redux mais je crois que :

 

State c'est ton état courant. Tu ne le modifie pas. Tu ne fais toujours qu'en créer un nouveau. La plupart du temps le nouveau que tu crées est fonction de l'état courant, mais pas toujours. Ton petit bout de code l'illustre très bien : tu incrementes et decrementes l'état courant, mais le reset s'en fiche complètement de l'état courant puisque tu le repasse à 0 quoi qu'il arrive


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2310300
masklinn
í dag viðrar vel til loftárása
Posté le 23-01-2018 à 19:14:34  profilanswer
 

TotalRecall a écrit :

Mais je ne suis pas sensé faire un truc avec mon objet "state" (comme les autres méthodes) ?
Genre éventuellement :
   state.count = 0;
   return {count: 0}

 

Sinon il me semblait avoir aussi déjà testé  le return {count: 0} mais sans aucune différence, je reverrai.
Merci


Bah je pense que non, les autres utilisent state parce qu'ils se basent dessus (pour incrementer ou décrementer un bout), là tu veux faire un reset donc tu dis juste quelle valeur tu veux.

 

D'ailleurs la doc de redux dit bien que

Citation :

Things you should never do inside a reducer:

  • Mutate its arguments;

"state" étant un argument, t'es bien censé pas le toucher modifier.

Message cité 1 fois
Message édité par masklinn le 23-01-2018 à 19:14:44

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2310305
flo850
moi je
Posté le 23-01-2018 à 21:15:24  profilanswer
 

et le seul endroit ou tu peux faire this.state = bidule c'est dans le constructeur de ton composant  
 
Sinon, tu dois utiliser setState()


---------------

n°2310307
masklinn
í dag viðrar vel til loftárása
Posté le 23-01-2018 à 21:27:59  profilanswer
 

flo850 a écrit :

et le seul endroit ou tu peux faire this.state = bidule c'est dans le constructeur de ton composant

 

Sinon, tu dois utiliser setState()


Notes que là il est dans redux pas dans react, s'pas le même état.


Message édité par masklinn le 23-01-2018 à 21:28:31

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2310308
flo850
moi je
Posté le 23-01-2018 à 21:44:47  profilanswer
 

a oui, bien vu


---------------

n°2310325
youmoussa
Ecrou-vis
Posté le 24-01-2018 à 03:49:23  profilanswer
 

Vous feriez mieux de lui apprendre à apprendre :o


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2310329
TotalRecal​l
Posté le 24-01-2018 à 09:04:01  profilanswer
 

kao98 a écrit :

Je connais pas redux mais je crois que :

 

State c'est ton état courant. Tu ne le modifie pas. Tu ne fais toujours qu'en créer un nouveau. La plupart du temps le nouveau que tu crées est fonction de l'état courant, mais pas toujours. Ton petit bout de code l'illustre très bien : tu incrementes et decrementes l'état courant, mais le reset s'en fiche complètement de l'état courant puisque tu le repasse à 0 quoi qu'il arrive

 
masklinn a écrit :


Bah je pense que non, les autres utilisent state parce qu'ils se basent dessus (pour incrementer ou décrementer un bout), là tu veux faire un reset donc tu dis juste quelle valeur tu veux.

 

D'ailleurs la doc de redux dit bien que

Citation :

Things you should never do inside a reducer:

  • Mutate its arguments;

"state" étant un argument, t'es bien censé pas le toucher modifier.


C'est parfaitement logique :jap:.
Je suppose que le return { count: 0 }; va en même temps affecter la valeur actuelle du "state.count" par un mécanisme planqué quelque part.
Faut que je lise un peu sur Redux pour savoir ce que c'est et où ça commence dans mon exemple :D.

 
youmoussa a écrit :

Vous feriez mieux de lui apprendre à apprendre :o


J'ai ouvert ça pour tuer 1h de temps hier et regarder à quoi ça ressemble, d'où le côté bordélique de la démarche.
Je ne suis pas développeur front end JS machin (tout ce que je fais en JS c'est du jQuery), et je me commencerai à apprendre à apprendre seulement si ça s'impose [:spamafote].
Et c'est pas gagné pour en avoir envie, pour l'instant les quelques exemples que j'ai vu me font l'effet d'être des usines à gaz pour peu de chose à la fin, même si le côté SPA et cie est sympa.

 

edit : et mais en fait le même exemple sans Redux c'est vachement plus direct et simple :o. Plus d'usine à gaz.


Message édité par TotalRecall le 24-01-2018 à 09:25:25

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2310330
gatsu35
Blablaté par Harko
Posté le 24-01-2018 à 09:04:18  profilanswer
 

dans Redux, le state c'est le single source of truth, et il est immutable, et dans les reducers tu n'as seulement le droit que de retourner un nouveau state dans ton reducer.

n°2310333
gatsu35
Blablaté par Harko
Posté le 24-01-2018 à 09:37:33  profilanswer
 

TotalRecall a écrit :

Mais je ne suis pas sensé faire un truc avec mon objet "state" (comme les autres méthodes) ?
Genre éventuellement :
   state.count = 0;
   return {count: 0}
 
Sinon il me semblait avoir aussi déjà testé  le return {count: 0} mais sans aucune différence, je reverrai.
Merci


Les autres méthodes ne font rien sur le state regarde :  

Code :
  1. case 'INCREMENT_COUNT':
  2. return { count: state.count + 1 };
  3. case 'DECREMENT_COUNT':
  4. return { count: state.count - 1 };


 
dans ces cas tu ne fais que reprendre l'état actuel et l'incrémenter ou le décrémenter

n°2310335
TotalRecal​l
Posté le 24-01-2018 à 10:10:05  profilanswer
 

Oui j'ai vu ça en postant, mais je préférais éviter d'écrire des tartines en posant plus de questions bêtes et juste attendre l'explication :p


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2310347
Shinuza
This is unexecpected
Posté le 24-01-2018 à 13:49:29  profilanswer
 

TotalRecall a écrit :

Hello,  
 
J'ai une question React niveau ultra débutant [:pseudoman].
Par curiosité j'ai commencé il y a genre 1h à regarder ReactJS. Je n'ai pas suivi de tutos, je suis parti d'un Hello World, à savoir le template par défaut de Microsoft quand on crée un projet MVC Core 2.0 avec react et redux.
 
Le machin comporte un formulaire avec un bouton qui vient incrémenter une variable.  
Je me suis dit naïvement "tiens je vais rajouter un bouton pour décrémenter et un bouton pour la RAZ".
 
C'est là que tout dérape :o [:spamafote]  
 
Je vous partage les fichiers .tsx (en premier) et .ts (en second)

Code :
  1. import * as React from 'react';
  2. import { Link, RouteComponentProps } from 'react-router-dom';
  3. import { connect } from 'react-redux';
  4. import { ApplicationState }  from '../store';
  5. import * as CounterStore from '../store/Counter';
  6. type CounterProps =
  7.     CounterStore.CounterState
  8.     & typeof CounterStore.actionCreators
  9.     & RouteComponentProps<{}>;
  10. class Counter extends React.Component<CounterProps, {}> {
  11.     public render() {
  12.         return <div>
  13.             <h1>Counter</h1>
  14.             <p>This is a simple example of a React component.</p>
  15.             <p>Current count: <strong>{ this.props.count }</strong></p>
  16.             <button onClick={() => { this.props.increment() }}>Increment</button>
  17.             <button onClick={() => { this.props.decrement() }}>Decrement</button>
  18.             <button onClick={() => { this.props.reset() }}>Reset count</button>
  19.         </div>;
  20.     }
  21. }
  22. export default connect(
  23.     (state: ApplicationState) => state.counter,
  24.     CounterStore.actionCreators               
  25. )(Counter) as typeof Counter;


 

Code :
  1. import { Action, Reducer } from 'redux';
  2. export interface CounterState {
  3.     count: number;
  4. }
  5. interface IncrementCountAction { type: 'INCREMENT_COUNT' }
  6. interface DecrementCountAction { type: 'DECREMENT_COUNT' }
  7. interface ResetCountAction { type: 'RESET_COUNT' }
  8. type KnownAction = IncrementCountAction | DecrementCountAction | ResetCountAction;
  9. export const actionCreators =
  10. {
  11.     increment: () => <IncrementCountAction>{ type: 'INCREMENT_COUNT' },
  12.     decrement: () => <DecrementCountAction>{ type: 'DECREMENT_COUNT' },
  13.     reset: () => <ResetCountAction>{ type: 'RESET_COUNT' },
  14. };
  15. export const reducer: Reducer<CounterState> = (state: CounterState, action: KnownAction) => {
  16.     switch (action.type) {
  17.         case 'INCREMENT_COUNT':
  18.             return { count: state.count + 1 };
  19.         case 'DECREMENT_COUNT':
  20.             return { count: state.count - 1 };
  21.         case 'RESET_COUNT':
  22.             state.count = -1;
  23.             return { count: state.count + 1 };
  24.         default:
  25.             // The following line guarantees that every action in the KnownAction union has been covered by a case above
  26.             const exhaustiveCheck: never = action;
  27.     }
  28.     return state || { count: 0 };
  29. };


 
Mon problème est dans le .ts lignes 43 à 45 : vous n'aurez pas manqué l'horrible chose que je suis obligé de faire pour ramener à 0 ma variable.
         

Code :
  1. case 'RESET_COUNT':
  2.             state.count = -1;
  3.             return { count: state.count + 1 };


C'est très moche mais c'est tout ce qui fonctionne.
   
Si à la place j'écris :  

Code :
  1. case 'RESET_COUNT':
  2.             state.count = 0;
  3.             return { count: state.count };


Ou

Code :
  1. case 'RESET_COUNT':
  2.             return { count: state.count = 0 };


 
Ca s'exécute bien mais dans ce cas, dans ma phrase Current count: <strong>{ this.props.count }</strong> la valeur affichée ne change pas lors du clic sur Reset.
Mais il semble que le 0 soit bien pris en compte, car si je clique sur Increment ou Decrement, la valeur repart bien de 0.
 
Pourtant on devrait pouvoir affecter une constante à une variable liée à l'état donc je ne comprend pas pourquoi ce comportement bizarre. Encore une fois je n'ai jamais fait de React et j'ai un niveau misérable en JS pur, merci de votre indulgence :o.
 
PS : désolé c'est verbeux mais la partie significative tient en très peu de lignes [:spamafote].
 
Merci :jap:

Mais quel merdier  :sweat:  


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2310348
TotalRecal​l
Posté le 24-01-2018 à 14:22:16  profilanswer
 

Shinuza a écrit :

Mais quel merdier  :sweat:


Je ne sais pas si tu es familier ou non de ces trucs, mais c'est exactement ce que je me suis dit aussi.

 

La version avec juste React est déjà plus légère (là apparemment c'est Redux qui ajoute tout un bordel d'interfaces et d'actions avec une sorte de switch pour brancher tout ça ensemble), et la version avec Angular encore mieux selon moi (moins verbeux, moins de "wiring" en tout genre, meilleur découpage des fichiers avec les templates / l'initialisation / les méthodes chacun dans leur coin, etc).
N'étant pas un fan des JS monstrueux ça me parle plus quand ça va droit au but.
Même si j'imagine que cette structure ultra lourde a probablement aussi un intérêt pour certaines applis lourdes, sinon ça n'existerait pas...

Message cité 1 fois
Message édité par TotalRecall le 24-01-2018 à 14:24:44

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2310350
ben547
Posté le 24-01-2018 à 15:14:40  profilanswer
 

Je croyais l'avoir déjà vu passer mais c'est une lecture nécessaire:  
 
https://medium.com/@dan_abramov/you [...] 46360cf367
You Might Not Need Redux

Message cité 1 fois
Message édité par ben547 le 24-01-2018 à 15:16:12
n°2310351
masklinn
í dag viðrar vel til loftárása
Posté le 24-01-2018 à 15:34:01  profilanswer
 

Perso j'aime bien la logique sous-tendante à Redux, c'est juste qu'en JS/TS ça ressemble à rien.

 

En Elm par contre…

Message cité 2 fois
Message édité par masklinn le 24-01-2018 à 15:34:59

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2310352
flo850
moi je
Posté le 24-01-2018 à 15:39:32  profilanswer
 

Je préfère tellement mobx, même si c'est moins découplé


---------------

n°2310353
TotalRecal​l
Posté le 24-01-2018 à 16:18:44  profilanswer
 

masklinn a écrit :

Perso j'aime bien la logique sous-tendante à Redux, c'est juste qu'en JS/TS ça ressemble à rien.

 

Mais carrément, pour moi c'est un énorme merdier.

 


Pour info, voici la version Angular de la même page (sans les actions, le reducer et cie, donc "moins découplé", mais avec quand même tout le nécessaire) :

 

La page :

Code :
  1. <h1>Counter</h1>
  2. <p>This is a simple example of an Angular component.</p>
  3. <p>Current count: <strong>{{ currentCount }}</strong></p>
  4. <button (click)="incrementCounter()">Increment</button>
  5. <button (click)="decrementCounter()">Increment</button>
  6. <button (click)="resetCounter()">Reset counter</button>


Le fichier de script :

Code :
  1. import { Component } from '@angular/core';
  2. @Component({
  3.     selector: 'counter',
  4.     templateUrl: './counter.component.html'
  5. })
  6. export class CounterComponent {
  7.     public currentCount = 0;
  8.     public incrementCounter() {
  9.         this.currentCount++;
  10.     }
  11.     public decrementCounter() {
  12.         this.currentCount--;
  13.     }
  14.     public resetCounter() {
  15.         this.currentCount = 0;
  16.     }
  17. }


En comparaison, pas la peine de préciser à quel point c'est 100% lisible et maintenable même pour un neuneu du js.

 

Et à côté j'ai aussi modifié l'autre exemple Angular du template .Net Core MVC qui affiche la météo en faisant des appels serveurs dans la même appli SPA pour y ajouter une pagination et quelques méthodes.
Ben le truc est aussi court, lisible, et facile à comprendre et à enrichir que cet exemple, et le langage de templating aussi sympa.

 

Moralité : je n'en connaissais aucun, j'ai testé à l'arrache React, React + Redux, Angular, et j'aime considérablement plus Angular :o.
C'est subjectif (donc les fans de react pas la peine de me tomber sur le poil) et basé sur une expérience très rapide, mais le constat est indéniable.

 

Je sais bien qu'il y en a d'autres (Vue, Ember, Aurelia, Knockout... C'est la jungle ces machins, vivement que les technos prennent un peu de maturité) mais faut bien commencer quelque part :o.

Message cité 1 fois
Message édité par TotalRecall le 24-01-2018 à 16:25:38

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2310354
Plam
Bear Metal
Posté le 24-01-2018 à 16:20:43  profilanswer
 

fr(e)actal sinon :o


---------------
Spécialiste du bear metal
n°2310355
TotalRecal​l
Posté le 24-01-2018 à 16:27:13  profilanswer
 

Jamais entendu parler, et google non plus :o


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2310357
flo850
moi je
Posté le 24-01-2018 à 16:36:58  profilanswer
 

Si tout est dans le même composant ( ce qui est le cas pour angular, sauf erreur de ma part)

 
Code :
  1. class CounterComponent extends React.Component{
  2.    state = {
  3.         counter:0
  4.    }
  5.    increment = ()=>{  
  6.        this.setState({counter:this.state.counter+1})
  7.   }
  8.    decrement = ()=>{  
  9.        this.setState({counter:this.state.counter-1})
  10.   }
  11.    reset = ()=>{
  12.        this.setState({counter:0})
  13.   }
  14.  
  15.    render(){
  16.      const {counter} = this.state
  17.       return <div>
  18.                     <h1>Counter</h1>
  19.                     <p>This is a simple example of an Angular component.</p>
  20.                     <p>Current count: <strong>{ counter }</strong></p>
  21.                     <button onClick={this.increment}  >Increment</button>
  22.                     <button onClick={this.decrement}>Increment</button>
  23.                     <button onClick={this.reset}>Reset counter</button>
  24.                 </div>
  25.    }
  26. }


Moi je trouve ça plutôt propre

 

Redux n'est pas forcement nécessaire

 

Clarification reset  = ()=>{ } force le fait que reset soit "bind" a this , et évite un peu de code

 


Message édité par flo850 le 24-01-2018 à 16:39:54

---------------

n°2310358
flo850
moi je
Posté le 24-01-2018 à 16:46:22  profilanswer
 

version en séparant le composant de présentation, et celui de contrôle (j'aime bien cette séparation)

Code :
  1. class CounterPresentation extends React.PureComponent{
  2.  render(){
  3.  const {counter,increment,decrement,reset}  = this.props
  4.     return <div>
  5.                   <h1>Counter</h1>
  6.                   <p>This is a simple example of an Angular component.</p>
  7.                   <p>Current count: <strong>{ counter }</strong></p>
  8.                   <button onClick={increment}  >Increment</button>
  9.                   <button onClick={decrement}>Increment</button>
  10.                   <button onClick={reset}>Reset counter</button>
  11.               </div>
  12.  }
  13. }
  14.  
  15.  
  16. class CounterController extends React.Component{
  17. state = {counter:0}
  18. increment = ()=>{  
  19.      this.setState({counter:this.state.counter+1})
  20. }
  21.  decrement = ()=>{  
  22.      this.setState({counter:this.state.counter-1})
  23. }
  24.  reset = ()=>{
  25.      this.setState({counter:0})
  26. }
  27.  render(){
  28.    const {counter} = this.state
  29.     return <CounterPresentation
  30.        counter={this.state.counter}
  31.       increment={this.increment}
  32.       decrement={this.decrement}
  33.       reset={this.reset}
  34.      />
  35.  }
  36. }


Message édité par flo850 le 24-01-2018 à 17:15:49

---------------

n°2310359
Shinuza
This is unexecpected
Posté le 24-01-2018 à 17:02:12  profilanswer
 

TotalRecall a écrit :


Je ne sais pas si tu es familier ou non de ces trucs, mais c'est exactement ce que je me suis dit aussi.
 
La version avec juste React est déjà plus légère (là apparemment c'est Redux qui ajoute tout un bordel d'interfaces et d'actions avec une sorte de switch pour brancher tout ça ensemble), et la version avec Angular encore mieux selon moi (moins verbeux, moins de "wiring" en tout genre, meilleur découpage des fichiers avec les templates / l'initialisation / les méthodes chacun dans leur coin, etc).  
N'étant pas un fan des JS monstrueux ça me parle plus quand ça va droit au but.  
Même si j'imagine que cette structure ultra lourde a probablement aussi un intérêt pour certaines applis lourdes, sinon ça n'existerait pas...

Bah c'est mon coup de gueule de moment. J'ai vraiment l'impression qu'on a détourné React de son utilisation primaire et j'ai de gros doutes sur sa capacité à scaler sur un gros projet. L'approche 100% fonctionnelle qu'on en fait est en ligne avec l'approche réactive, mais la complexité explose quand on prend en compte les contraintes impératives d'une application web.
 

ben547 a écrit :

Je croyais l'avoir déjà vu passer mais c'est une lecture nécessaire:  
 
https://medium.com/@dan_abramov/you [...] 46360cf367
You Might Not Need Redux

This.
 

masklinn a écrit :

Perso j'aime bien la logique sous-tendante à Redux, c'est juste qu'en JS/TS ça ressemble à rien.
 
En Elm par contre…

This.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2310360
Plam
Bear Metal
Posté le 24-01-2018 à 17:11:18  profilanswer
 

https://github.com/FormidableLabs/freactal :o


---------------
Spécialiste du bear metal
n°2310366
masklinn
í dag viðrar vel til loftárása
Posté le 24-01-2018 à 18:02:20  profilanswer
 

Shinuza a écrit :

Bah c'est mon coup de gueule de moment. J'ai vraiment l'impression qu'on a détourné React de son utilisation primaire et j'ai de gros doutes sur sa capacité à scaler sur un gros projet. L'approche 100% fonctionnelle qu'on en fait est en ligne avec l'approche réactive, mais la complexité explose quand on prend en compte les contraintes impératives d'une application web.


J'aurais plus à voir le problème inverse perso, c'est une approche sémantiquement simple mais très fonctionnelle et pure alors que le JS est un langage impératif et impur, donc t'as des "trous" entre l'approche et le language que tu dois combler à coup de mortier syntactique (appels de fonctions ou constructions complexes), et si le projet est simpliste (genre un compteur) bah tu te retrouves avec plus de mortier que de caillasse dans ton mur. Je m'attendrais à ce qu'avec la croissance du projet et la complexification de la logique la quantité relative de mortier diminue, et celle de caillasse augmente.
 
Et TS me semble pas aider non plus ici, il augmente notablement les frais (le reducer c'est 50% de bordel TypeScript) sans améliorer la paie.
 
Parce-que exactement la même logique/sémantique dans un language plus adapté (Elm) ça donne:

Code :
  1. import Html exposing (..)
  2. import Html.Events exposing (onClick)
  3. main : Program Never Model Msg
  4. main =
  5.    beginnerProgram { model = model, view = view, update = update }
  6. -- normalement j'utiliserais Model = Int mais je colle à l'originel
  7. type alias Model =  
  8.    { count : Int }
  9. model : Model
  10. model =  
  11.    { count = 0 }
  12. type Msg
  13.    = Increment
  14.    | Decrement
  15.    | Reset
  16. update : Msg -> Model -> Model
  17. update msg model =
  18.    case msg of
  19.        Increment ->
  20.            { model | count = model.count + 1 }
  21.        Decrement ->  
  22.            { model | count = model.count - 1 }
  23.        Reset ->  
  24.            { model | count = 0 }
  25. view : Model -> Html Msg
  26. view model =
  27.    div []
  28.        [ h1 [] [ text "Counter" ]
  29.        , p [] [ text "This is a simple example of an Elm view" ]
  30.        , p [] [ text "Current count: "
  31.               , strong [] [ text ( toString model.count ) ]
  32.               ]
  33.        , button [ onClick Increment ] [ text "Increment" ]
  34.        , button [ onClick Decrement ] [ text "Decrement" ]
  35.        , button [ onClick Reset ] [ text "Reset count" ]
  36.        ]


 
Alors oui il faut connaître la syntaxe et t'as pas du jsx-qui-ressemble-à-du-HTML, mais pour moi la clarté et le ratio logique/frais est quand même pas dégueu. Et encore une fois c'est pas une question de

Citation :

bordel d'interfaces et d'actions avec une sorte de switch pour brancher tout ça ensemble


c'est dedans, le flux unidirectionnel avec une logique applicative atomique est là, c'est juste que le langage est mieux adapté à cette utilisation. Et les types sont statiques et costauds et explicites (mon dernier bricolage en elm, tous les bugs que j'ai eu qui ont passé la compilation était dans les bricolage de chaînes de caractères).
 
(nota: j'ai même pas testé le code localement avant de le poster ici, mais je l'ai collé dans http://elm-lang.org/try histoire de et il fonctionne du premier coup [:doc_prodigy] )

Message cité 1 fois
Message édité par masklinn le 24-01-2018 à 18:07:45

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2310372
Shinuza
This is unexecpected
Posté le 24-01-2018 à 19:00:53  profilanswer
 

masklinn a écrit :


J'aurais plus à voir le problème inverse perso, c'est une approche sémantiquement simple mais très fonctionnelle et pure alors que le JS est un langage impératif et impur, donc t'as des "trous" entre l'approche et le language que tu dois combler à coup de mortier syntactique (appels de fonctions ou constructions complexes), et si le projet est simpliste (genre un compteur) bah tu te retrouves avec plus de mortier que de caillasse dans ton mur. Je m'attendrais à ce qu'avec la croissance du projet et la complexification de la logique la quantité relative de mortier diminue, et celle de caillasse augmente.
 
Et TS me semble pas aider non plus ici, il augmente notablement les frais (le reducer c'est 50% de bordel TypeScript) sans améliorer la paie.

C'est pas délirant comme analyse, et pourtant quand on conserve une approche impérative en gardant de l'isolation, ça reste très lisible et beaucoup moins bloaté.

masklinn a écrit :


Parce-que exactement la même logique/sémantique dans un language plus adapté (Elm) ça donne:

Code :
  1. import Html exposing (..)
  2. import Html.Events exposing (onClick)
  3. main : Program Never Model Msg
  4. main =
  5.    beginnerProgram { model = model, view = view, update = update }
  6. -- normalement j'utiliserais Model = Int mais je colle à l'originel
  7. type alias Model =  
  8.    { count : Int }
  9. model : Model
  10. model =  
  11.    { count = 0 }
  12. type Msg
  13.    = Increment
  14.    | Decrement
  15.    | Reset
  16. update : Msg -> Model -> Model
  17. update msg model =
  18.    case msg of
  19.        Increment ->
  20.            { model | count = model.count + 1 }
  21.        Decrement ->  
  22.            { model | count = model.count - 1 }
  23.        Reset ->  
  24.            { model | count = 0 }
  25. view : Model -> Html Msg
  26. view model =
  27.    div []
  28.        [ h1 [] [ text "Counter" ]
  29.        , p [] [ text "This is a simple example of an Elm view" ]
  30.        , p [] [ text "Current count: "
  31.               , strong [] [ text ( toString model.count ) ]
  32.               ]
  33.        , button [ onClick Increment ] [ text "Increment" ]
  34.        , button [ onClick Decrement ] [ text "Decrement" ]
  35.        , button [ onClick Reset ] [ text "Reset count" ]
  36.        ]


 
Alors oui il faut connaître la syntaxe et t'as pas du jsx-qui-ressemble-à-du-HTML, mais pour moi la clarté et le ratio logique/frais est quand même pas dégueu. Et encore une fois c'est pas une question de

Citation :

bordel d'interfaces et d'actions avec une sorte de switch pour brancher tout ça ensemble


c'est dedans, le flux unidirectionnel avec une logique applicative atomique est là, c'est juste que le langage est mieux adapté à cette utilisation. Et les types sont statiques et costauds et explicites (mon dernier bricolage en elm, tous les bugs que j'ai eu qui ont passé la compilation était dans les bricolage de chaînes de caractères).


Mais oui putain  :o  
 

masklinn a écrit :


(nota: j'ai même pas testé le code localement avant de le poster ici, mais je l'ai collé dans http://elm-lang.org/try histoire de et il fonctionne du premier coup [:doc_prodigy] )

[:classe++]


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2310375
masklinn
í dag viðrar vel til loftárása
Posté le 24-01-2018 à 19:23:05  profilanswer
 

Shinuza a écrit :

C'est pas délirant comme analyse, et pourtant quand on conserve une approche impérative en gardant de l'isolation, ça reste très lisible et beaucoup moins bloaté.


C'est pas en opposition à ce que je dis, quand tu restes dans les forces et la logique du langage t'as moins de bricolage à ajouter pour combler les trous, donc t'as moins de bruit et plus de signal. Et je pense que plus le projet est petit (moins il a de signal) et plus c'est sensible, parce que dans mon expérience les frais croient généralement sous-linéairement (même si selon le système tu peux avoir des "murs" avec des croissances brutales par endroit).

 

Notes que ça veut pas dire que tu finis nécessairement par t'y retrouver (let me tell you about struts), et que je suis pas vraiment emballé ou convaincu par redux (et je trouve bizarre de le mettre comme template pour débutant). Mais bon. Après

Citation :

Je n'ai pas suivi de tutos, je suis parti d'un Hello World, à savoir le template par défaut de Microsoft quand on crée un projet MVC Core 2.0 avec react et redux.


je sais pas si MS a pas des meilleurs templates pour débutants ou application basiques. Et autogénérer des platrées de merde me semble dans la lignée de mes souvenirs de leurs templates Win32 :D

Message cité 2 fois
Message édité par masklinn le 24-01-2018 à 19:31:13

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2310388
Shinuza
This is unexecpected
Posté le 24-01-2018 à 19:58:16  profilanswer
 

masklinn a écrit :


C'est pas en opposition à ce que je dis, quand tu restes dans les forces et la logique du langage t'as moins de bricolage à ajouter pour combler les trous, donc t'as moins de bruit et plus de signal. Et je pense que plus le projet est petit (moins il a de signal) et plus c'est sensible, parce que dans mon expérience les frais croient généralement sous-linéairement (même si selon le système tu peux avoir des "murs" avec des croissances brutales par endroit).
 
Notes que ça veut pas dire que tu finis nécessairement par t'y retrouver (let me tell you about struts), et que je suis pas vraiment emballé ou convaincu par redux (et je trouve bizarre de le mettre comme template pour débutant). Mais bon. Après

:jap: Je pense aussi que Redux est le mauvais élève de la bande.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2310403
skylight
Made in France.
Posté le 25-01-2018 à 10:39:41  profilanswer
 

J'ai un backoffice, où je dois récupérer des données.
Il faut au préalable se connecter avant, via un simple formulaire (j'ai les accès).
Seulement, je dois accéder à une URL précise pour avoir les détails de chaque entité que je veux (genre http://api.domaine.fr/api/admin/places/2).
J'ai environ 3300 entité, donc pas la peine de le faire à la main...

 

Le formulaire de login a cette gueule :

 
Code :
  1. <!DOCTYPE html><html><head><meta charset=utf-8><title>Mowwgli - BackOffice</title><link href=/static/css/app.02cb09f71463c94797aa61776fbaced8.css rel=stylesheet></head><style>body{
  2.     font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;    margin: 0;    height: 100%;    width: 100%;  }</style><body><div id=app></div><script type=text/javascript src=/static/js/manifest.8a0ef35ee59d132d6d76.js></script><script type=text/javascript src=/static/js/vendor.92132d555181aebb9772.js></script><script type=text/javascript src=/static/js/app.289b20c5d6064f478d29.js></script></body></html>


(Grosso modo c'est du généré)

 

J'ai tenté de me connecter en php via un script local avec curl, mais ça m'envoie bouler

Code :
  1. {"status":"fail","error":{"status":401,"message":"Unauthorized"}}
 

Je voulais juste me connecter via php et via une petite boucle, récupérer en file_get_content toutes les urls souhaitées.
Des tips ?
Thx :jap:

Message cité 1 fois
Message édité par skylight le 25-01-2018 à 10:39:56
n°2310404
TotalRecal​l
Posté le 25-01-2018 à 10:42:38  profilanswer
 

Ben ton script n'est pas connecté [:spamafote]
Donc faut te connecter d'abord et pour ça faut savoir comment se fait la connexion :o


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2310405
TotalRecal​l
Posté le 25-01-2018 à 10:45:35  profilanswer
 

masklinn a écrit :


Citation :

Je n'ai pas suivi de tutos, je suis parti d'un Hello World, à savoir le template par défaut de Microsoft quand on crée un projet MVC Core 2.0 avec react et redux.


je sais pas si MS a pas des meilleurs templates pour débutants ou application basiques. Et autogénérer des platrées de merde me semble dans la lignée de mes souvenirs de leurs templates Win32 :D


Ah non c'était pas les templates, c'était le Win32 qui était naturellement comme ça :D
 
Pour React/Redux j'ai pas d'avis sur "Est ce que ça aurait pu être plus propre avec les même outils" vu que j'ai découvert juste par ça, mais effectivement c'est dégueu tel que dans cet exemple :o


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2310406
skylight
Made in France.
Posté le 25-01-2018 à 10:47:45  profilanswer
 

TotalRecall a écrit :

Ben ton script n'est pas connecté [:spamafote]
Donc faut te connecter d'abord et pour ça faut savoir comment se fait la connexion :o


Justement, j'ai tenté de me connecter en curl, mais ça veut rien savoir.
 
 

$ckfile = tempnam ("/tmp", "CURLCOOKIE" );    
$post = array(
    'email'   => 'example@domain.com',
    'password'  => 'pass'
    );
 
$post_data  = http_build_query($post);
$ch     = curl_init('http://site.com/signin?redirect=%2F');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_exec($ch);
curl_close($ch);


 

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  1407  1408  1409  ..  1449  1450  1451  1452  1453  1454

Aller à :
Ajouter une réponse
 

Sujets relatifs
blabla 3blabla 2
PUTAIN HARKO TU AS FERM2 BLABLA ![Beaucoup de blabla pour rien : post à effacer] Compiler .bat
variable1="blabla + variable2 +blala : c'est possible ??[PHP & regex] "blabla blabla file.ext?point=444 blabla" Recupérer 444
mail("celine@hotmail.com"," sujet","blabla"); pose une err ! Help[MySQL] WHERE 'blabla' compris dans le champ truc
[blabla@hosto] Le topic des vieux[PHP / BlaBla - limite]
Plus de sujets relatifs à : blabla@web


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR