1. https://github.com/adabrz777/tetris/blob/master/src/component/Next/Next.js i inne pliki też, brak formatowania, co oznacza, zapnij sobie jakiś linter np. eslint który Ci tego przypilnuje (i wielu innych kwestii) plus możesz pomyśleć np. o prettier dla autoformatowania, tutaj nie namawiam, są zwolennicy i przeciwnicy, ja sam jeszcze rok temu raczej byłem przeciwny ale z biegiem czasu się przekonałem, głównie dlatego, że w ogóle nie zastanawiasz się podczas pisania nad formatowaniem, robi to za Ciebie narzędzie w git hook i przy CR też na to nie patrzysz.
2. z powyższego pliku ten switch wygląda na coś, co można zrobić jednym komponentem z jakimś sparametryzowaniem... switch nie jest dobry w tej postaci, jak zechcesz zmienić coś we wrapperze to musisz zmieniać każdego case...
3. "console.error('Wrong element type');" takie coś nie ma prawa pojawić się w kodzie wystawionym do CR, czyli kodzie produkcyjnym. Po pierwsze user nie zobaczy tej informacji, a po drugie nie ma sensu brudzić konsoli errorami. Tego typu operacje powinny być albo przechwycone i np. jakoś zasygnalizowane userowi tak, aby zobaczył błąd lub wyciszone jeśli są nieistotne dla aplikacjii.
4. return <div className={'Next'}>{!this.props.gameOver ? nextBoard : null}</div>;
mi osobiście nie podoba się takie coś... ja bym to zapisał inaczej, np.:
if (!this.props.gameOver) {
return null;
}
return <div className={'Next'}>{nextBoard}</div>;
wg mnie jest to znacznie czytelniejsze i łatwiejsze w analizie.
5. "let { board, WIDTH, HEIGHT, gameOver } = this.props;" dlaczego let? Propsy to coś, czego komponent nie zmienia, to powinno być const, nie widzę uzasadnienia dla zastosowania tu let. Plus dlaczego stosujesz różne formy nazywania parametrów? Stosuj jeden format, np. camelCase.
i parę pytań, jakie mogłyby paść np. na rozmowie, gdybyś tak wykonał zadanie rekrutacyjne:
1. dlaczego wszystkie komponenty to "Component", a nie "PureComponent"?
2. dlaczego używasz klas, a nie funkcji?
3. dlaczego robisz export default, a nie export nazwany?
4. raz masz "export default class...", a raz "class ..." i potem osobno "eport default", dlaczego?
To tak na szybko. Generalnie powyższych pytań nie traktuj jako błąd, nie jest to błąd (no może poza brakiem spójności w pkt. 4), ale to są pytania, po których można jakoś ocenić czy "wiesz co robisz", czy po prostu jest to Twój jeden z pierwszych tematów w React i dopiero raczkujesz.
A co do pracy to wg mnie jeszcze za wcześnie, ale oczywiscie to subiektywna ocena. Pracuję obecnie z koleżanką, która przyszła do nas niedawno na staż po inżynierce i została jako Junior i wg mnie jest dobrym wyznacznikiem tego, co powinno cechować takiego juniora. Otóż bez problemu odnajduje się w aplikacjach zarówno pisanych w React (podejście klasowe i funkcyjne), w projektach Angular, w tym nawet w hybrydzie angular/angularJS, bez problemu ogarnia async, rxjs, rozumie i umie pracować z XHR, umie pisać testy jednostkowe i e2e, w tym również testy operacji asynchronicznych, bez problemu pracuje z dokumentacjami pl/en, a do tego ładnie radzi sobie również w mikrousługach Java/Kotlin na Springu, ale tego nikt nie wymaga od frontend-developera. Także moim zdaniem to są wymogi, które pozwalają startować na juniora (w tym wypadku to był staż, ale potem przeszedł w juniora).