1638800100
ドラッグアンドドロップ機能を備えたTrelloのようなボードを作成したいと思ったことはありませんか?まあ、それはあなたが思っているよりも実際には簡単です。このチュートリアルでは、React、TypeScript、およびstyled-componentsを使用してそれを行う方法を示します。わずか数分で独自のTrelloのようなボードを構築するために必要なすべてを学びます。
簡単にするために、create-react-app
を使用して、開始するために必要なすべてのファイルを提供しましょう。このパッケージをマシンにインストールしている場合は、それを使用してください。そうでない場合で、インストールしたくない場合は、npxを使用できます。これによりcreate-react-app
、マシンにインストールせずにパッケージを使用できるようになります。
使用npx
は、npm
コマンドを使用してnpmパッケージをインストールするのと似ています。あなただけの置き換えnpm
でnpx
、残りは同じです。重要なことの1つは、このチュートリアルではTypeScriptを使用することです。したがって、--typescript
を使用するときは必ず含めるようにしてくださいcreate-react-app
。コマンド全体はになりますnpx create-react-app board-app --typescript
。
create-react-app
完了したら、いくつかのパッケージを追加する必要があります。最初のものはstyled-components
です。ボードアプリのスタイリングにはこのライブラリを使用します。2番目はreact-beautiful-dnd
です。このライブラリは、ボードのドラッグアンドドロップ機能を提供します。ボードアイテムをボード列またはカード間で移動できます。Trelloのように。
これら2つのライブラリの型定義も追加する必要があります。これにより、TypeScriptはこれら2つのライブラリの提案と型チェックを提供します。これにより、作業がより速く簡単になり、コードもより安全になります。だから、yarn add -D @types/react-beautiful-dnd @types/styled-components
またはnpm i @types/react-beautiful-dnd @types/styled-components --save
。
///
// package.json (part)
///
...
"dependencies": {
"react": "^16.8.6",
"react-beautiful-dnd": "^11.0.3",
"react-dom": "^16.8.6",
"styled-components": "^4.2.0"
},
"devDependencies": {
"@types/jest": "24.0.13",
"@types/node": "12.0.2",
"@types/react": "16.8.17",
"@types/react-beautiful-dnd": "^11.0.2",
"@types/react-dom": "16.8.4",
"@types/styled-components": "^4.1.15",
"react-scripts": "3.0.1",
"typescript": "3.4.5"
}
...
最後のこと。によって生成さcreate-react-app
れたテンプレートには、このチュートリアルでは使用しないファイルがいくつか含まれています。直接使用するファイルは。のみですindex.tsx
。:その後、我々はボード用のコンポーネントを作成しboard-column.tsx
、board-item.tsx
、board.tsx
およびboard-initial-data.ts
ボードに表示されているデータを含みます。フォルダ構造は次のようになります。
board-app/
├─node_modules
├─public
│ ├─favicon.ico
│ ├─index.html
│ └─manifest.json
├─src
│ ├─components
│ │ └─board-column.tsx
│ │ └─board-item.tsx
│ │ └─board.tsx
│ ├─data
│ │ └─board-initial-data.ts
│ ├─index.tsx
│ └─react-app-env.d.ts
└─ package.json
└─ tsconfig.json
create-react-app
テンプレートをカスタマイズした後の2番目のステップは、ボードにコンテンツを追加することです。これは、Board
作成するコンポーネントで実行できます。ただし、それにより、コードの読み取りと使用が困難になる可能性があります。特に、ボードやボード列のアイテムを追加する場合。別のファイルを使用すると、コードをよりクリーンに保つのに役立ちます。
我々は3つのキーを持つオブジェクトとして私たちのボード用のデータを格納しますitems
、columns
とcolumnsOrder
。の値は、items
個々のボードアイテムを含む別のオブジェクトになります。各アイテムには2つのキーがあります:id
とcontent
。id
ドラッグ&ドロップのために必要です。content
キーの値は、ボードに表示される値になります。
columns
keyの値もオブジェクトになります。すべての列のデータが含まれます。各列はありますid
、title
とitemsIds
。id
ドラッグ&ドロップのためです。title
私たちのボードに表示される列見出しになります。itemsIds
特定の列内のボード項目のIDを含む配列であろう。
開始条件として、すべてのアイテムを最初の列に配置します。これは、items
オブジェクトで指定されたすべてのIDを取得し、ここに配置することを意味します。id
アイテムごとに正しい値のキーを使用してください。最後に、columnsOrder
ボードに列を表示する順序を決定します。
///
// src/data/board-initial-data.ts
///
export const initialBoardData = {
items: {
'item-1': { id: 'item-1', content: 'Content of item 1.'},
'item-2': { id: 'item-2', content: 'Content of item 2.'},
'item-3': { id: 'item-3', content: 'Content of item 3.'},
'item-4': { id: 'item-4', content: 'Content of item 4.'},
'item-5': { id: 'item-5', content: 'Content of item 5.'},
'item-6': { id: 'item-6', content: 'Content of item 6.'},
'item-7': { id: 'item-7', content: 'Content of item 7.'}
},
columns: {
'column-1': {
id: 'column-1',
title: 'Column 1',
itemsIds: ['item-1', 'item-2', 'item-3', 'item-4', 'item-5', 'item-6', 'item-7']
},
'column-2': {
id: 'column-2',
title: 'Column 2',
itemsIds: []
},
'column-3': {
id: 'column-3',
title: 'Column 3',
itemsIds: []
},
'column-4': {
id: 'column-4',
title: 'Column 4',
itemsIds: []
}
},
columnsOrder: ['column-1', 'column-2', 'column-3', 'column-4']
}
これで、ボードのデータの準備ができたら、ボードアイテムのコンポーネントを作成しましょう。簡単に言えば、ボードアイテムは、列やカードに表示される、やることなどの個々のアイテムを表します。構造はシンプルになります。Trelloと同様に、すべてのアイテムには1つのテキストのみが表示されます。小道具を使ってこれを行います:props.item.content
。
を使用して、ボードアイテムをBoardItem
コンポーネントとして作成しstyled-components
ます。ドラッグアンドドロップを機能させるにはDraggable
、からインポートしたこのコンポーネントをコンポーネント内にラップする必要がありreact-beautiful-dnd
ます。このコンポーネントには2つの小道具が必要です:draggableId
とindex
。の値はにdraggableId
なりますprops.item.id
。の値はにindex
なりますprops.index
。
まだ終わっていません。BoardItem
コンポーネントに追加する必要のある追加の小道具があります。react-beautiful-dnd
必要となる{...provided.draggableProps}
、{...provided.dragHandleProps}
とref
。の値はにref
なりますprovided.innerRef
。これにより、すべてのボードアイテムをドラッグ可能になります。BoardItem
コンポーネントに追加する最後の小道具はisDragging
です。
この小道具を使用して、ドラッグ中にアイテムのスタイルを変更しますstyled-components
。ドラッグを検出するために、によって提供されるsnapshot
オブジェクトとそのisDragging
プロパティを使用しますreact-beautiful-dnd
。の値isDragging
は、true
ドラッグ中およびfalse
デフォルト状態のブール値です。
重要なことの1つ。TypeScriptはisDragging
propを受け入れません。これは、のBoardItemStylesProps
タイプエイリアスをBoardItem
として定義した直後に、このプロップのタイプエイリアスをとして定義する必要があることを意味しますBoardItemProps
。
///
// src/components/board-item.tsx
///
import * as React from 'react'
import { Draggable } from 'react-beautiful-dnd'
import styled from 'styled-components'
// Define types for board item element properties
type BoardItemProps = {
index: number
item: any
}
// Define types for board item element style properties
// This is necessary for TypeScript to accept the 'isDragging' prop.
type BoardItemStylesProps = {
isDragging: boolean
}
// Create style for board item element
const BoardItemEl = styled.div<BoardItemStylesProps>`
padding: 8px;
background-color: ${(props) => props.isDragging ? '#d3e4ee' : '#fff'};
border-radius: 4px;
transition: background-color .25s ease-out;
&:hover {
background-color: #f7fafc;
}
& + & {
margin-top: 4px;
}
`
// Create and export the BoardItem component
export const BoardItem = (props: BoardItemProps) => {
return <Draggable draggableId={props.item.id} index={props.index}>
{(provided, snapshot) => (
{/* The BoardItem */}
<BoardItemEl
{...provided.draggableProps}
{...provided.dragHandleProps}
ref={provided.innerRef}
isDragging={snapshot.isDragging}
>
{/* The content of the BoardItem */}
{props.item.content}
</BoardItemEl>
)}
</Draggable>
}
作成する2番目のコンポーネントは、ボード列のコンポーネント、または必要に応じてカードです。このプロセスは、ボードアイテムの作成に使用したプロセスと非常によく似ています。TypeScriptのタイプエイリアスから始めます。ボードアイテムと同様に、アイテムをボード上にドラッグすると、ボードのスタイルが変更されます。つまり、列がアクティブで、アイテムをその列にドロップできる場合です。
これには、isDraggingOver
prop用にタイプエイリアスを作成する必要もあります。これがあれば、この小道具を使用して、アクティブなボード列の背景色を変更できます。列には3つのコンポーネントが含まれ、すべてがで作成されstyled-components
ます。これらはBoardColumnTitle
でBoardColumnContent
包まれていBoardColumnWrapper
ます。
にBoardColumnTitle
は、列のタイトルが含まれます。にBoardColumnContent
は、その特定の列に属するすべてのボードアイテムが含まれます。小道具map()
を繰り返しitems
取得するために使用します。必ずインポートしてくださいBoardItem
。最後に、dag&dropを機能させるには、BoardColumnContent
inDroppable
コンポーネントをラップする必要があります。
このコンポーネントをreact-beautiful-dnd
ライブラリからインポートします。このコンポーネントには1つの支柱が必要ですdroppableId
。この小道具のこの値は、各列のIDになります。小道具からIDを取得できます:props.column.id
。ボードアイテムと同様に、BoardColumnContent
「ドロップ可能」にするためにいくつかの小道具を追加する必要があります。
これらの小道具がある{...provided.droppableProps}
とref
。の値はにref
なりますprovided.innerRef
。列のスタイルを変更するために、isDraggingOver
propを追加し、それを使用して、アクティブなときにドロップ領域の背景を変更します。そうしないと、ボードアイテムをどこにドロップするかわからない場合があります。
ボードアイテムの場合と同様に、snapshot
によって提供されるオブジェクトを使用しますreact-beautiful-dnd
。ただし、ここではそのisDraggingOver
プロパティを使用します。アイテムがドロップ領域の上にある場合はisDraggingOver
プロパティの値もブール値でtrue
あり、false
そうでない場合はデフォルト状態です。
///
// src/components/board-column.tsx
///
import * as React from 'react'
import { Droppable } from 'react-beautiful-dnd'
import styled from 'styled-components'
// Import BoardItem component
import { BoardItem } from './board-item'
// Define types for board column element properties
type BoardColumnProps = {
key: string,
column: any,
items: any,
}
// Define types for board column content style properties
// This is necessary for TypeScript to accept the 'isDraggingOver' prop.
type BoardColumnContentStylesProps = {
isDraggingOver: boolean
}
// Create styles for BoardColumnWrapper element
const BoardColumnWrapper = styled.div`
flex: 1;
padding: 8px;
background-color: #e5eff5;
border-radius: 4px;
& + & {
margin-left: 12px;
}
`
// Create styles for BoardColumnTitle element
const BoardColumnTitle = styled.h2`
font: 14px sans-serif;
margin-bottom: 12px;
`
// Create styles for BoardColumnContent element
const BoardColumnContent = styled.div<BoardColumnContentStylesProps>`
min-height: 20px;
background-color: ${props => props.isDraggingOver ? '#aecde0' : null};
border-radius: 4px;
`
// Create and export the BoardColumn component
export const BoardColumn: React.FC<BoardColumnProps> = (props) => {
return(
<BoardColumnWrapper>
{/* Title of the column */}
<BoardColumnTitle>
{props.column.title}
</BoardColumnTitle>
<Droppable droppableId={props.column.id}>
{(provided, snapshot) => (
{/* Content of the column */}
<BoardColumnContent
{...provided.droppableProps}
ref={provided.innerRef}
isDraggingOver={snapshot.isDraggingOver}
>
{/* All board items belong into specific column. */}
{props.items.map((item: any, index: number) => <BoardItem key={item.id} item={item} index={index} />)}
{provided.placeholder}
</BoardColumnContent>
)}
</Droppable>
</BoardColumnWrapper>
)
}
ボードアイテムとコラムのコンポーネントが揃ったら、最も難しい部分の時間です。ボードコンポーネントには、ドラッグアンドドロップ機能のロジックが含まれます。また、ボードデータをロードし、それを使用して列を生成します。これはboard-initial-data.ts
、BoardColumn
コンポーネントをインポートする必要があることを意味します。
次に、を使用styled-components
してボードのスタイルを作成しましょう。結果はBoardEl
、ボードのラッパー要素として使用するコンポーネントになります。その後Board
、クラスとして、という新しいReactコンポーネントを作成しましょう。このクラスの状態をinitialBoardData
、またはの内容で初期化しますboard-initial-data.ts
。
次に、ドラッグアンドドロップのロジックを作成します。というメソッドを作成しましょうonDragEnd
。このメソッドは、ドラッグされたアイテムがリストの外にドロップされているかどうかをチェックします。次に、ドラッグしたアイテムが同じ場所にドロップされているかどうかを確認します。これらの条件のいずれかが当てはまる場合、私たちは何もしたくありません。return
実行を停止するために追加すると、ジョブが実行されます。
次に、アイテムが別の場所にドロップされたときの状況を処理する必要がありますが、同じ列にあります。まず、アイテムのドラッグ元の列を見つける必要があります。次に、アイテムがドロップされた列を見つける必要があります。これら2つが同じである場合、アイテムが別の場所にドロップされたことがわかりますが、同じ列にあります。
まず、現在アクティブなリストにあるすべてのアイテムIDを取得する必要があります。次に、ドラッグしたアイテムのIDを元の位置から削除する必要があります。次に、ドラッグしたアイテムのIDを新しい位置に挿入する必要があります。次に、列とアイテムのデータを使用して、新しい更新されたオブジェクトを作成する必要があります。その後、列とアイテムの更新されたデータを使用して新しいボード状態を作成できます。これが完了すると、最終的にボードの状態を新しいデータで更新できます。
2番目のシナリオは、アイテムをあるリストから別のリストにドラッグする場合です。その場合も、ソースリスト内のすべてのアイテムIDを取得し、ドラッグされたアイテムのIDを元の位置から削除する必要があります。次に、ソース列のデータを使用して、新しい更新されたオブジェクトを再度作成できます。その後、アイテムをドロップした宛先リストからのデータが必要です。
前と同様のプロセスに従うことができます。まず、宛先リストのすべてのアイテムIDを取得する必要があります。次に、ドラッグしたアイテムのIDを宛先リストの新しい位置に挿入する必要があります。次に、データを使用して、宛先列用に新しい更新されたオブジェクトを再度作成できます。次に、ソースと宛先の両方の更新されたデータを使用して新しいボード状態を作成します。
最後のステップとして、ボードの状態を新しいデータで更新できます。これらすべての結果として、列内のアイテムの順序を変更して、ある場所から別の場所にドラッグすることができます。また、リストからアイテムを取得して別のアイテムに移動することもできます。さて、最後のステップで、ボード内のすべての列をレンダリングします。これは比較的簡単です。
まず、DragDropContext
からコンポーネントをインポートする必要がありますreact-beautiful-dnd
。次に、クラスのrender
メソッドでBoard
、BoardEl
作成したコンポーネントを使用し、styled-components
そのDragDropContext
中に配置します。これにより、ドラッグアンドドロップのコンテキストが作成され、ドラッグアンドドロップ可能なコンポーネントに必要なデータが提供されます。
内部では、の配列を反復処理DragDropContext
するために使用します。これにより、列をレンダリングする順序がわかります。次に、列ごとに、列のIDとその列に属するアイテムを取得する必要があります。このすべてのデータがあれば、コンポーネントをボードにレンダリングできます。map()columnsOrderboard-initial-data.tsBoardColumn
///
// src/components/board.tsx
///
import * as React from 'react'
import { DragDropContext } from 'react-beautiful-dnd'
import styled from 'styled-components'
// Import data for board
import { initialBoardData } from '../data/board-initial-data'
// Import BoardColumn component
import { BoardColumn } from './board-column'
// Create styles board element properties
const BoardEl = styled.div`
display: flex;
align-items: flex-start;
justify-content: space-between;
`
export class Board extends React.Component {
// Initialize board state with board data
state = initialBoardData
// Handle drag & drop
onDragEnd = (result: any) => {
const { source, destination, draggableId } = result
// Do nothing if item is dropped outside the list
if (!destination) {
return
}
// Do nothing if the item is dropped into the same place
if (destination.droppableId === source.droppableId && destination.index === source.index) {
return
}
// Find column from which the item was dragged from
const columnStart = (this.state.columns as any)[source.droppableId]
// Find column in which the item was dropped
const columnFinish = (this.state.columns as any)[destination.droppableId]
// Moving items in the same list
if (columnStart === columnFinish) {
// Get all item ids in currently active list
const newItemsIds = Array.from(columnStart.itemsIds)
// Remove the id of dragged item from its original position
newItemsIds.splice(source.index, 1)
// Insert the id of dragged item to the new position
newItemsIds.splice(destination.index, 0, draggableId)
// Create new, updated, object with data for columns
const newColumnStart = {
...columnStart,
itemsIds: newItemsIds
}
// Create new board state with updated data for columns
const newState = {
...this.state,
columns: {
...this.state.columns,
[newColumnStart.id]: newColumnStart
}
}
// Update the board state with new data
this.setState(newState)
} else {
// Moving items from one list to another
// Get all item ids in source list
const newStartItemsIds = Array.from(columnStart.itemsIds)
// Remove the id of dragged item from its original position
newStartItemsIds.splice(source.index, 1)
// Create new, updated, object with data for source column
const newColumnStart = {
...columnStart,
itemsIds: newStartItemsIds
}
// Get all item ids in destination list
const newFinishItemsIds = Array.from(columnFinish.itemsIds)
// Insert the id of dragged item to the new position in destination list
newFinishItemsIds.splice(destination.index, 0, draggableId)
// Create new, updated, object with data for destination column
const newColumnFinish = {
...columnFinish,
itemsIds: newFinishItemsIds
}
// Create new board state with updated data for both, source and destination columns
const newState = {
...this.state,
columns: {
...this.state.columns,
[newColumnStart.id]: newColumnStart,
[newColumnFinish.id]: newColumnFinish
}
}
// Update the board state with new data
this.setState(newState)
}
}
render() {
return(
<BoardEl>
{/* Create context for drag & drop */}
<DragDropContext onDragEnd={this.onDragEnd}>
{/* Get all columns in the order specified in 'board-initial-data.ts' */}
{this.state.columnsOrder.map(columnId => {
// Get id of the current column
const column = (this.state.columns as any)[columnId]
// Get item belonging to the current column
const items = column.itemsIds.map((itemId: string) => (this.state.items as any)[itemId])
// Render the BoardColumn component
return <BoardColumn key={column.id} column={column} items={items} />
})}
</DragDropContext>
</BoardEl>
)
}
}
これが最後のステップです。次に、Page
コンポーネントを作成します。このコンポーネントには、Board
完成したばかりのコンポーネントが含まれます。Page
コンポーネントをDOMでレンダリングする前に、を使用してコンポーネントを少しきれいにすることができstyle-component
ます。ライブラリcreateGlobalStyle
からインポートしたヘルパーを使用してみましょうstyled-components
。
このヘルパーを使用すると、グローバルスタイルを定義できます。これらのグローバルスタイルは、特定のローカルCSSクラスに限定されません。簡単に言うと、やcreateGlobalStyle
などの要素のスタイルを定義するために使用できます。したがって、CSSリセットや基本スタイルをどこにでも適用したい場合は、それが探しているものです。htmlbodycreateGlobalStyle
今のところ、シンプルに保ち、body
要素の背景を変更するだけです。これは、ボードの柱を目立たせるのに役立ちます。
///
// src/index.tsx
///
import * as React from 'react'
import * as ReactDOM from 'react-dom'
import { createGlobalStyle } from 'styled-components'
// Import main Board component
import { Board } from './components/board'
// Use createGlobalStyle to change the background of 'body' element
const GlobalStyle = createGlobalStyle`
body {
background-color: #4bcffa;
}
`
// Create component for the page
const Page = () => (<>
{/* Add main Board component */}
<Board />
{/* Add GlobalStyle */}
<GlobalStyle />
</>)
// Render the page into DOM
ReactDOM.render(<Page />, document.getElementById('root'))
おめでとう!このチュートリアルを終了し、独自のドラッグアンドドロップTrelloのようなボードを作成しました。よくできた!このチュートリアルを楽しんでいただけたでしょうか。また、何か新しいことを学ぶ機会があること、または少なくともあなたがすでに知っていることを実践する機会があることを願っています。次はどこへ行くの?あなたは今日あなたが取り組んだことについてもっと学ぶことができます。
styled-componentsのWebサイトから始めることができます。ここでは、ボードの見栄えを良くする方法を学ぶことができます。または、react-beautiful-dndで他に何ができるかを見てみましょう。TypeScriptを初めて使用し、気に入った場合は、TypeScriptのWebサイトをご覧ください。ちなみに、これまでTypeScriptを使用したことがない場合は、試してみることを強くお勧めします。
TypeScriptは、コードをまったく新しいレベルに引き上げるのに役立ちます。同じことがあなたの生産性にも当てはまります。TypeScriptを使用すると、よりクリーンで安全で保守性の高いコードをほぼ自動的に記述できます。TypeScriptはゲームチェンジャーです。試してみると、プレーンJavaScriptで何も書きたくないでしょう。そして、それでは、お時間をいただきありがとうございます。
リンク: https://blog.alexdevero.com/trello-board-react-typescript-styled-components/
1598839687
If you are undertaking a mobile app development for your start-up or enterprise, you are likely wondering whether to use React Native. As a popular development framework, React Native helps you to develop near-native mobile apps. However, you are probably also wondering how close you can get to a native app by using React Native. How native is React Native?
In the article, we discuss the similarities between native mobile development and development using React Native. We also touch upon where they differ and how to bridge the gaps. Read on.
Let’s briefly set the context first. We will briefly touch upon what React Native is and how it differs from earlier hybrid frameworks.
React Native is a popular JavaScript framework that Facebook has created. You can use this open-source framework to code natively rendering Android and iOS mobile apps. You can use it to develop web apps too.
Facebook has developed React Native based on React, its JavaScript library. The first release of React Native came in March 2015. At the time of writing this article, the latest stable release of React Native is 0.62.0, and it was released in March 2020.
Although relatively new, React Native has acquired a high degree of popularity. The “Stack Overflow Developer Survey 2019” report identifies it as the 8th most loved framework. Facebook, Walmart, and Bloomberg are some of the top companies that use React Native.
The popularity of React Native comes from its advantages. Some of its advantages are as follows:
Are you wondering whether React Native is just another of those hybrid frameworks like Ionic or Cordova? It’s not! React Native is fundamentally different from these earlier hybrid frameworks.
React Native is very close to native. Consider the following aspects as described on the React Native website:
Due to these factors, React Native offers many more advantages compared to those earlier hybrid frameworks. We now review them.
#android app #frontend #ios app #mobile app development #benefits of react native #is react native good for mobile app development #native vs #pros and cons of react native #react mobile development #react native development #react native experience #react native framework #react native ios vs android #react native pros and cons #react native vs android #react native vs native #react native vs native performance #react vs native #why react native #why use react native
1636236360
In this lesson we look at how to add #cypress with code coverage support for a Create #React App application with #TypeScript.
In the end you will have a developer flow that can save you a bunch of time in testing effort
1638074460
This quick lesson demonstrates how to ignore errors in a JSX / #React file with #TypeScript
1615544450
Since March 2020 reached 556 million monthly downloads have increased, It shows that React JS has been steadily growing. React.js also provides a desirable amount of pliancy and efficiency for developing innovative solutions with interactive user interfaces. It’s no surprise that an increasing number of businesses are adopting this technology. How do you select and recruit React.js developers who will propel your project forward? How much does a React developer make? We’ll bring you here all the details you need.
Facebook built and maintains React.js, an open-source JavaScript library for designing development tools. React.js is used to create single-page applications (SPAs) that can be used in conjunction with React Native to develop native cross-platform apps.
In the United States, the average React developer salary is $94,205 a year, or $30-$48 per hour, This is one of the highest among JavaScript developers. The starting salary for junior React.js developers is $60,510 per year, rising to $112,480 for senior roles.
In context of software developer wage rates, the United States continues to lead. In high-tech cities like San Francisco and New York, average React developer salaries will hit $98K and $114per year, overall.
However, the need for React.js and React Native developer is outpacing local labour markets. As a result, many businesses have difficulty locating and recruiting them locally.
It’s no surprise that for US and European companies looking for professional and budget engineers, offshore regions like India are becoming especially interesting. This area has a large number of app development companies, a good rate with quality, and a good pool of React.js front-end developers.
As per Linkedin, the country’s IT industry employs over a million React specialists. Furthermore, for the same or less money than hiring a React.js programmer locally, you may recruit someone with much expertise and a broader technical stack.
React is a very strong framework. React.js makes use of a powerful synchronization method known as Virtual DOM, which compares the current page architecture to the expected page architecture and updates the appropriate components as long as the user input.
React is scalable. it utilises a single language, For server-client side, and mobile platform.
React is steady.React.js is completely adaptable, which means it seldom, if ever, updates the user interface. This enables legacy projects to be updated to the most new edition of React.js without having to change the codebase or make a few small changes.
React is adaptable. It can be conveniently paired with various state administrators (e.g., Redux, Flux, Alt or Reflux) and can be used to implement a number of architectural patterns.
Is there a market for React.js programmers?
The need for React.js developers is rising at an unparalleled rate. React.js is currently used by over one million websites around the world. React is used by Fortune 400+ businesses and popular companies such as Facebook, Twitter, Glassdoor and Cloudflare.
As you’ve seen, locating and Hire React js Developer and Hire React Native developer is a difficult challenge. You will have less challenges selecting the correct fit for your projects if you identify growing offshore locations (e.g. India) and take into consideration the details above.
If you want to make this process easier, You can visit our website for more, or else to write a email, we’ll help you to finding top rated React.js and React Native developers easier and with strives to create this operation
#hire-react-js-developer #hire-react-native-developer #react #react-native #react-js #hire-react-js-programmer
1654588030
TypeScript Deep Dive
I've been looking at the issues that turn up commonly when people start using TypeScript. This is based on the lessons from Stack Overflow / DefinitelyTyped and general engagement with the TypeScript community. You can follow for updates and don't forget to ★ on GitHub 🌹
If you are here to read the book online get started.
Book is completely free so you can copy paste whatever you want without requiring permission. If you have a translation you want me to link here. Send a PR.
You can also download one of the Epub, Mobi, or PDF formats from the actions tab by clicking on the latest build run. You will find the files in the artifacts section.
All the amazing contributors 🌹
Share URL: https://basarat.gitbook.io/typescript/
Author: Basarat
Source Code: https://github.com/basarat/typescript-book/
License: View license