(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Nánari skoðun á vinsælustu React-krókunum - The Codest
The Codest
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Iðnaðargreinar
    • Fjártæknifyrirtæki og bankastarfsemi
    • E-commerce
    • Adtech
    • Heilbrigðistækni
    • Framleiðsla
    • Flutningar
    • Bifreiða
    • Internet hlutanna
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
Aftur ör Farðu aftur
2021-12-07
Hugbúnaðarþróun

Nánari skoðun á vinsælustu React-krókunum

The Codest

Pawel Rybczynski

Software Engineer

Í gegnum mörg viðtöl tók ég eftir því að jafnvel reyndir forritarar eiga í vandræðum með að greina Hooks, hvað þá þeirra flóknari eiginleika. Ég mun því reyna að útskýra í þessari grein hvernig best sé að nota Hooks.

Hér er tómt.

Mikilvægustu hlutirnir sem þú þarft að muna um Hooks:

  • Þau má aðeins nota í fallhlutverkum – flokkshlutverk hafa sína eigin framkvæmd lífsferils;
  • Þeir byrja alltaf á nota;
  • Þú getur notað eins marga Hooks og þú vilt, en þú þarft að muna að notkun þeirra hefur áhrif á heildarframmistöðuna;
  • Þau verða að vera keyrð í sama röð í hverri renderingu… en af hverju? Skoðum dæmi:
innflutningur { useState,useEffect } frá "react";

export default function FunctionComponent() {
const [value, setValue] = useState(1);
const [doubleValue, setDoubleValue] = useState(1);
if (value > 3) {
  useEffect(() => setDoubleValue(value * 2),[value]);
}

return (
  
    {`Single ${value} Double ${doubleValue}`}
    
  
);
}
```

Í fyrstu færðu viðvörun frá eslint:

<code>srcFunctionComponent.js
   Lína 11:5:  React Hook "useEffect" er kallað skilyrt. <strong>React krókar</strong> verður að vera kallað í nákvæmlega sama röð í hverri íhlutarskipulagningu .eslintreact-hooks/rules-of-hooksHljóðskrift

Eins og þú sérð er þetta bara ESLint-viðvörun, svo þú getur slökkt á henni með því að bæta við skipuninni hér að neðan efst í Fallhlutverkseining

/* eslint-disable react-hooks/reglur-fyrir-króka */ Hljóðskrift

og það mun virka en aðeins þar til við uppfyllum skilyrðið sem keyrir Hook-inn okkar. Það sem við sjáum strax í kjölfarið er þessi villa.

Ógreind villa: Fleiri hooks voru keyrðir en í síðasta renderi.
 React 5
 FunctionComponent FunctionComponent.js:11
 React 12
 unstable_runWithPriority scheduler.development.js:468
 React 17
     javascript index.js:7
 js main.chunk.js:905
 Webpack 7
 react-dom.development.js:15162

Hvers vegna gerist þetta? React treystir á röðina sem Hooks-arnir eru kallaðir í, því React myndi ekki vita hvað eigi að skila fyrir useEffect þar sem enginn slíkur Hook var í röðinni til að athuga.

Mundu að eslint er öflugt tól, það hjálpar okkur Greina marga mögulega galla og villur. Að slökkva á viðvörunum er hættulegt; athugaðu alltaf hvort að hunsa viðvörunina geti valdið því að forritið hrundi.

nota state

Þú veist líklega hvernig það lítur út 😉

Stofnaðu ástand (value) og aðgerð til að breyta því (setValue) með useState(0);Hljóðskrift

Þannig að þú hefur fjóra þætti: state (reactive gildi), update-fall (setter), actual hook (fall) og valfrjálst upphafsgildi. Hvers vegna skilar það fylki? Vegna þess að við getum endurskipulagt það eins og okkur hentar.

Nú vil ég einbeita mér að síðasta þættinum – upphafsgildinu. Það eru tvær leiðir til að senda upphafsástandið:

  1. Með fastkóðuðu gildi eða einhverju slíku – sem verður kallað við hverja uppfærslu
Stofnaðu ástand (value) og aðgerð til að breyta því (setValue) með useState(0);Hljóðskrift
  1. Með fallútgáfu. Þetta er mjög gagnlegt ef við viljum keyra upphafsástandið aðeins einu sinni, í fyrstu uppfærslunni. Kannski þarftu að framkvæma margar flóknar útreikningar til að fá upphafsástandið? Þetta mun draga úr auðlindanotkun, jibbí!
const [value, setValue] = useState(() => {
   console.log("INIT");
   return 0;
 });

Hvernig á að athuga að fyrsta leiðin sé í raun kölluð í hverri uppfærslu? Búðu til fall og sendu það sem upphaflegt ástand:

const checkInit = () => {
console.log("INIT");
return 0;
};

const [value, setValue] = useState(checkInit());
```

Og nú skaltu senda það með annarri aðferð:

const checkInit = () => {
console.log("INIT");
return 0;
};

const [value, setValue] = useState(() => checkInit());
```

Kúl, ekki satt?

gott.png

Annað sem getur valdið villum í flæði forritsins: þú veist líklega hvernig á að uppfæra ástand, ekki satt?

Settu gildi í 1;Hljóðskrift

Allt í lagi… en hvað ef ég vil uppfæra ástandið út frá fyrra ástandi?

setja gildið + 1;Hljóðskrift

Já… en nei… Hvað ef þú reynir að kalla setter-aðgerðina tvisvar sinnum í röð? Mælt er með að nota fall til að uppfæra ástand út frá fyrra ástandi. Það tryggir að þú sért að vísa til fyrra ástands.

setValue((prevState) => prevState + 1);
// með hlutum:
setUser((prevState) => ({ ...prevState, lastName: "Brzeczyszczykiewicz" }));

Nota áhrif

Þessi Hook tekur tvö rök (hið seinna er valkvætt) og við notum hann til að meðhöndla aukaverkanir. Og eftir því hvaða gildi við sendum sem seinna rök, verður Hook-inn kallaður á mismunandi hátt:

  1. án annars rökarguments – hver birting
useEffect(() => {
   doSomething();
 });Hljóðskrift
  1. tóm fylki – aðeins við fyrstu birtingu
useEffect(() => {
   doSomething();
 }, []);
  1. Röð með háðubreytum – í hvert sinn sem gildi í háðubreyturöðinni breytist
Notaðu `useEffect` til að framkvæma aðgerð sem fer fram eftir uppsetningu hlutans. `useEffect` er hringrás sem kallast einu sinni við upphaf hleðslu og síðan í hverri `useState`-breytingu.;Hljóðskrift

Hreinsun

Með useEffect getum við notað eitthvað sem kallast cleanup. Hvað er það til fyrir? Það er mjög gagnlegt, en ég tel að það henti best til að hreinsa viðburðastjóra. Segjum sem svo að þú viljir búa til atburðastjóra sem fer eftir ákveðnu ástandi. Þú vilt ekki bæta nýjum atburðastjóra við í hvert skipti sem ástandið breytist, því eftir nokkrar render-gerðir verða svo margir atburðastjórar að það mun hafa áhrif á frammistöðu forritsins. Frábær leið til að forðast slíkt er að nota hreinsunarvirknina. Hvernig gerirðu það? Bættu einfaldlega return-falli við useEffect.

useEffect(() => {
console.log("hliðaráhrif 1", count);
return () => {
console.log("eytt 1");
};
});

useEffect(() => {
console.log("hliðaráhrif 2", count);
return () => {
console.log("DESTROYED 2");
};
}, []);

useEffect(() => {
console.log("side effect 3", count);
return () => {
console.log("DESTROYED 3");
};
}, [count]);
```

Vegna þess að það er inni í useEffect-hookinu er return-kallið ákvarðað út frá dependency-raðnum – við hverja render-gerð, eingöngu við fyrstu render-gerðina, eða þegar gildi í dependency-raðnum breytist. En þegar komponentið er fjarlægt af kerfinu (unmounted) er hreinsun kölluð með öðrum rökstuddi, óháð öllu. Return-ið kóði er kallað áður en raunverulegi kóði frá Hook keyrir. Það er mjög rökrétt – fyrst hreinsa gamla útgáfuna, svo búa til nýja. Er það ekki?

useEffect(() => {
   // addEventListener
   console.log("Add");
   return () => {
 // removeEventListener
 console.log("Remove");
   };
 }, [value]);Hljóðskrift

Svo, fyrst, munt þú fá fjarlægja skilaboð, þá Bæta við.

Það er eitt sem þarf að hafa í huga þegar useEffect er notað með ósamhverfum kóða inni í því. Skoðaðu kóðann hér að neðan:

`useEffect(() => {
   fetch("https://picsum.photos/5000/5000").then(() => {
    setValue((prevState) => prevState + 1);
   });
 }, []);`;Hljóðskrift

Í fyrstu lítur það fínt út. Þú ert að sækja eitthvað gögn, og þegar gögnin berast, uppfærðu ástandið. Og hér er gildran:

Stundum færðu svona viðvörun:
Ekki er hægt að framkvæma React-ástandsuppfærslu á óuppsettri íhlut. Þetta er engin aðgerð, en það bendir til minnisleka í forritinu þínu. Til að laga þetta skaltu aflýsa öllum áskriftum og ósamhverfum verkefnum í hreinsunarfalli useEffect.

Ástæðan er sú að í millitíðinni er hægt að fjarlægja þennan hluta úr sýningu, en forritið mun samt reyna að uppfæra ástand hans eftir að loforðið hefur verið uppfyllt. Hvernig á að takast á við þetta? Þú þarft að athuga hvort hlutinn sé til.

useEffect(() => {
let mounted = true;
fetch("https://picsum.photos/5000/5000").then(() => {
if (mounted) {
setValue((prevState) => prevState + 1);
}
});

return () => {
mounted = false;
};
}, []);
```

Athugið: Það er mjög svipaður Hook => useLayoutEffect() – callback-ið keyrir eftir að íhlutinn er birtur en áður en DOM-ið er sjónrænt uppfært. Hann er gagnlegur þegar unnið er með getBoundingClientRect(), en þú ættir að nota useEffect sem sjálfgefið. Af hverju? Vegna þess að hann getur hindrað sjónrænar uppfærslur – þegar þú hefur flókinn kóða inni í effect-Hookinu þínu.

Nota samhengi

Hvað er þetta til fyrir? Til að deila gögnum án þess að senda props. Samsett úr eftirfarandi þáttum:

  1. Skapað samhengi – gögn
  2. Samhengi veitandi – veitir samhengi fyrir alla undirstöðuþætti
  3. Færð gildi – gögn sem þú vilt deila
  4. Hökk – til að lesa sameiginleg gögn
const user = {
name: "Adam",
lastName: "Kowalski",
};

export const UserContext = createContext(user);

;
```

Í child þarftu að flytja inn samhengi, kalla useContext-hookið og senda það samhengi sem rök.

import { UserContext } from "./App";

const { name } = useContext(UserContext);

return <h1>Hæ {name}<>
```

Svo þar. Lítur vel út. Aðallega til að senda áfram alþjóðleg gögn, eins og þemu o.s.frv. Ekki er mælt með notkun þess í verkefnum með mjög örtum breytingum.

Auðvitað getum við búið til sérsniðinn samhengi-veitanda og sérsniðið Hook til að draga úr endurtekningum í kóðanum… en ég mun fjalla um sérsniðna Hooks í næsta grein.

Notaðu reducer

Það gerir okkur kleift að stjórna ástandinu og endurteikna þegar ástandið breytist – eins og useState. Það er svipað og endur Reducer. Þetta er betra en useState þegar ástandsreiknireglan er flóknari.

`const [state, dispatch] = useReducer(reducer, initialArg);`; Hljóðskrift
  • Skilar raunverulega stöðu með dispatch-aðferð.
  • Ólíkt og í redux er upphafsgildið tilgreint þegar Hook-ið er kallað.

Það er einnig þriðja rök sem hægt er að senda til useReducer – init-fallið.

`const [state, dispatch] = useReducer(reducer, initialArg, init);`;Hljóðskrift

Hvað er þetta til fyrir? Það má nota þegar við viljum endurstilla ástandið í upphafsgildi þess. Hér að neðan má finna gott dæmi:

// Foreldri
// Barn
function init(initialNumber) {
return { number: initialNumber };
}

function reducer(state, action) {
switch (action.type) {
case "breyta":
return { number: Math.random() };
case "endurstilla":
return init(action.payload);
default:
throw new Error();
}
}

export default function ChildComponent({ getFactorial }) {
const [state, dispatch] = useReducer(reducer, initialNumber, init);

return (
<>
   <h2>Númer: {state.number}</h2>
      <button
        onclick="{()" > Endurstilla
      </button>
      <button onclick="{()" > dispatch({ type: "change" })}&gt;Teikna</button>
    </>
  );
}

Númer: {state.number}

Minnkandi upphaf.png

Notaðu callback-hnappinn

Hvenær á að nota það? Þegar við viljum ná vísitengdri jafngildi (og þar með fækka þeim fallum sem búin eru til). Þetta Hook skilar fallinu, ólíkt useMemo sem skilar gildinu.

Dæmi: Búðu til fall í foreldrisamsetningunni og sendu það síðan með props

// Foreldri
 const getSquaredValue = () => count * count;
 ...
 return (
   
 )Hljóðskrift

Skoðaðu síðan í barnahlutanum hversu oft effect Hook verður kallaður eftir að þú bætir þessari aðgerð við háðnaraðgerðarröðina:

// Barn
 useEffect(() => {
   console.log("getSquaredValue", getSquaredValue());
 }, [getSquaredValue]);Hljóðskrift

Það mun skrá í konsóluna í hverri rennsli! Jafnvel þó gildin inni í fá ferkvaðurgildið Funkían breyttist ekki. En við getum forðast þetta með því að pakka þeirri funkíu inn í useCallback.

`getSquaredValue` er `useCallback`-kall sem skilar gildinu `count * count` og tekur `count` sem argument.Hljóðskrift

Við getum einnig sent nokkra breytur til þessarar falli:

const getSquaredValue = useCallback(
   (multiplier) => count * count * multiplier,
   [count]
 );Hljóðskrift

nota minni

const memoizedValue = useMemo(() => {
   return doSomething(value);
 }, [value]);Hljóðskrift
  • Það er ekki hlutlaust þegar litið er á kostnað auðlinda – useMemo þarf að kalla á í hverri render-ferli, það geymir gildið í minni og ber það saman (aukinn minnisþungi),
  • notar memoization – fínstillingartækni, sérstakt form skyndiminni.

Þú ættir að nota það eingöngu í tveimur aðstæðum:

  1. Ef þú vilt koma í veg fyrir að kalla á flókinn kóða í hverri uppfærslu;
  2. Ef þú vilt ná tilvísunarsamræmi.

Skoðum aðeins nánar seinna tilfellið. Við viljum nota useEffect með hlut sem háðubreytu. Þar sem hlutir eru bornir saman eftir vísun þeirra, er useEffect kallað við hverja uppfærslu. Til að forðast þetta getum við sameinað useEffect og useMemo til að memo-a slíka hluti og síðan sent þá memo-aða hluti í háðubreyturörið. Stutt dæmi:

Fyrst skaltu reyna að gera það án useMemo:

const hobbit = { name: "Bilbo" };

useEffect(() => {
console.log("Halló ", hobbit.name);
}, [hobbit]);
```

Einnig færðu viðvörun:

'hobbit'-hluturinn veldur því að háð breytist í useEffect Hook (lína 49) við hverja uppfærslu. Færðu hann inn í useEffect callback-inn. Annars umkringdu upphafsvinnsluna fyrir 'hobbit' í eigin useMemo() Hook.eslintreact-hooks/exhaustive-deps

Reyndu þá með useMemo:

const hobbit = useMemo(() => {
return { name: "Bilbo" };
}, []);

useEffect(() => {
console.log("Halló ", hobbit.name);
}, [hobbit]);
```

nota ref

Það mikilvægasta: useRef kallar ekki fram endurteikningu (eins og useState), því það er ekki tengt teiknunarhringnum – það geymir sömu vísun milli teikninga.

`const ref = useRef(0);`;Hljóðskrift

Til að kalla á vistað gildi þarftu að nota núverandi eiginleika (ref er hlutur) – núverandi tilvísun

Annar tilgangurinn sem við getum notað þennan Hook er að vísa í þætti innan HTML. Hver þáttur hefur ref-eiginleika. Þannig getum við meðhöndlað fókus, atburði o.s.frv.

Í þriðja tilvikinu getum við notað refs til að takast á við óstýrða íhluti. Þú getur lesið meira um þá í react skjöl,
En í stuttu máli lítur þetta svona út:

export default function UncontrolledForm() {
  const input = useRef();

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(input.current.value);
  };

  return (
    
 
 
    
  );
}

Eins og þú sérð er enginn atburðastjóri, hann geymir bara innsláttarverðgildið. Þetta er frábært til að meðhöndla einföld eyðublöð þegar þú vilt bara lesa varin gildi þegar þú þarft á þeim að halda (til dæmis við innsendingu).

Bónus: Það er frábært þegar þú þarft að muna fyrri gildi í state. Þú getur notað useEffect-hookið til þess; sendu bara state-ið til ref-sins.

const [value, setValue] = useState("");

let prevValue = useRef("");

useEffect(() => {
  prevValue.current = value;
}, [value]);

 setValue(e.target.value)}>;

Eins og þú sérð eru hókar ekki svo augljósir. Við getum sameinað þá til að leysa mörg vandamál. Þú munt án efa hagnast verulega á því að rannsaka þetta efni.

Og það eru líka sérsniðnir krókar…

Að lokum, React krókar hafa byltingarkennt leiðina React forritarar Nálgun byggingar vefur forrit . Með því að bjóða upp á innsæi og skilvirkari leið til að stjórna ástandi og lífsferli í virknihlutum hafa hooks orðið ómissandi hluti af React þróun .

Hvort sem þú ert reyndur forritari eða rétt að byrja með React, er mikilvægt að skilja vinsælustu hooks-ana og notkunartilvik þeirra. Með hooks-um eins og useState, useEffect, useContext og fleiri, React íhlutir má byggja með hreinni og endurnýtanlegri kóða. Ennfremur getan til að búa til sérsniðnir krókar Leyfir forriturum að fanga og deila skynsemi á milli margra þátta, sem eykur endurnýtanleika kóða og móduleiningaskipan. Þegar React heldur áfram að þróast og bætir við nýjum eiginleikum munu hooks án efa gegna miðlægu hlutverki við að nýta alla möguleika rammasins.

Svo, hvort sem þú ert að vinna að smáforriti eða stórfelldu vefumsókn, að tileinka þér React krókar mun bæta þróunarvinnuflæði þitt og opna fjölda möguleika til að búa til trausta og eiginleikaríka React-umsóknir .

Lok fyrsta hluta

Lesa meira:

JavaScript er alveg dauður. Einhver gaur á netinu

Setja upp GraphQL/MongoDB API með Netlify Functions

Hvernig á að drepa verkefni með slæmum forritunarvenjum

Tengdar greinar

Myndskreyting af heilbrigðisforriti fyrir snjallsíma með hjartatákni og hækkandi heilsufarsgrafík, merkt með The Codest-merkinu, sem táknar stafræna heilsu og HealthTech-lausnir.
Hugbúnaðarþróun

Heilbrigðis-hugbúnaður: gerðir og notkunartilvik

Tólin sem heilbrigðisstofnanir treysta á í dag líta ekkert út eins og pappírsskjöl frá fyrri áratugum. Heilbrigðisforrit styðja nú heilbrigðiskerfi, sjúklingameðferð og nútímalega heilbrigðisþjónustu á klínískum og...

THECODEST
Yfirlitsmynd sem sýnir hnignandi súlurit með uppstrekktri ör og gullmynt sem táknar kostnaðarhagkvæmni eða sparnað. The Codest-merkið birtist í efra vinstra horni með slagorðinu "In Code We Trust" á ljósgráum bakgrunni.
Hugbúnaðarþróun

Hvernig á að stækka þróunarteymið án þess að fórna gæðum vörunnar

Ertu að stækka þróunarteymið þitt? Lærðu hvernig á að vaxa án þess að fórna gæðum vörunnar. Þessi leiðarvísir fjallar um merki um að kominn sé tími til að stækka, uppbyggingu teymisins, ráðningar, forystu og verkfæri—og hvernig teymið getur...

THECODEST
Hugbúnaðarþróun

Búðu til vefumsóknir sem þola framtíðina: innsýn frá sérfræðiteymi The Codest

Uppgötvaðu hvernig The Codest skarar fram úr við að búa til stigstækar, gagnvirkar vefumsóknir með nýjustu tækni, sem bjóða upp á hnökralausa notendaupplifun á öllum kerfum. Lærðu hvernig sérfræðiþekking okkar knýr fram stafræna umbreytingu og viðskipti...

THECODEST
Hugbúnaðarþróun

Topp 10 hugbúnaðarþróunarfyrirtæki í Lettlandi

Kynntu þér fremstu hugbúnaðarþróunarfyrirtæki Lettlands og nýstárlegar lausnir þeirra í nýjustu grein okkar. Uppgötvaðu hvernig þessir tækniforingjar geta hjálpað til við að efla fyrirtækið þitt.

thecodest
Lausnir fyrir fyrirtæki og vaxtarfyrirtæki

Grunnatriði í Java hugbúnaðarþróun: Leiðarvísir að árangursríkri útvistun

Kannaðu þessa ómissandi leiðbeiningu um árangursríka outsourcing Java hugbúnaðarþróun til að auka skilvirkni, afla aðgangs að sérfræðiþekkingu og tryggja árangur verkefna með The Codest.

thecodest

Gerðu þig áskrifanda að þekkingargrunni okkar og vertu upplýstur um sérfræðiþekkingu upplýsingatæknigeirans.

    Um okkur

    The Codest – Alþjóðlegt hugbúnaðarþróunarfyrirtæki með tæknimiðstöðvar í Póllandi.

    Bretland - Höfuðstöðvar

    • Skrifstofa 303B, 182-184 High Street North E6 2JA
      Lundúnir, England

    Pólland - staðbundin tæknimiðstöðvar

    • Fabryczna skrifstofugarður, Aleja
      Herbergi 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsjá, Pólland

    The Codest

    • Heim
    • Um okkur
    • Þjónusta
    • Case Studies
    • Vitið hvernig
    • Starfsferilmöguleikar
    • Orðabók

    Þjónusta

    • Það er ráðgjafi
    • Hugbúnaðarþróun
    • Bakendaþróun
    • Framhliðþróun
    • Staff Augmentation
    • Bakhliðaráþróunaraðilar
    • Skýjaverkfræðingar
    • Gagnaverkfræðingar
    • Annað
    • Gæðatryggingartæknimenn

    Auðlindir

    • Staðreyndir og goðsagnir um samstarf við utanaðkomandi hugbúnaðarþróunaraðila
    • Frá Bandaríkjunum til Evrópu: Af hverju ákveða bandarísk sprotafyrirtæki að flytja til Evrópu?
    • Samanburður á tæknifjarkerfisþróunarmiðstöðvum: Tech Offshore Europe (Pólland), ASEAN (Filippseyjar), Eurasia (Tyrkland)
    • Hvert eru helstu áskoranir CTO-a og CIO-a?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Höfundarréttur © 2026 af The Codest. Öll réttindi áskilin.

    is_ISIcelandic
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian lt_LTLithuanian is_ISIcelandic