Netinho  Santos

Netinho Santos

1650940794

The Fundamental Theorem of Galois Theory | What is the square root of two?

This video is an introduction to Galois Theory, which spells out a beautiful correspondence between fields and their symmetry groups.  

This video is a quick-and-dirty introduction to Galois theory. But as with any quick introduction, there are details that I gloss over for the sake of brevity. To learn these details rigorously, I've listed a few resources down below.

(a) Galois Theory

Galois Theory notes by Tom Leinster: These notes are by far the best resource out there for learning the subject. They’re completely rigorous, but they’re also written in a very reader-friendly way with lots of examples and motivation. (See link here: https://www.maths.ed.ac.uk/~tl/gt/gt.pdf )

This playlist on Galois Theory by Professor Richard Borcherds is a gem. It explains Galois Theory from the ground up, rigorously, in almost complete generality. ( https://www.youtube.com/playlist?list=PL8yHsr3EFj53Zxu3iRGMYL_89GDMvdkgt  )

(b) Group Theory

Group Theory lectures: This playlist by Professor Benedict Gross is a beauty. It goes through the entire group theory syllabus from the ground up, and Professor Gross is a masterful lecturer. (see link here: https://www.youtube.com/playlist?list=PLelIK3uylPMGzHBuR3hLMHrYfMqWWsmx5 )

Intro: (0:00)
What is the square root of 2?: (1:08)
Fields and Automorphisms: (6:04)
Examples: (8:55)
Group Theory: (16:34)
The Fundamental Theorem: (18:25)

Subscribe: https://www.youtube.com/c/Aleph0/featured 

#calculator #maths #mathematics 

What is GEEK

Buddha Community

The Fundamental Theorem of Galois Theory | What is the square root of two?
Netinho  Santos

Netinho Santos

1650940794

The Fundamental Theorem of Galois Theory | What is the square root of two?

This video is an introduction to Galois Theory, which spells out a beautiful correspondence between fields and their symmetry groups.  

This video is a quick-and-dirty introduction to Galois theory. But as with any quick introduction, there are details that I gloss over for the sake of brevity. To learn these details rigorously, I've listed a few resources down below.

(a) Galois Theory

Galois Theory notes by Tom Leinster: These notes are by far the best resource out there for learning the subject. They’re completely rigorous, but they’re also written in a very reader-friendly way with lots of examples and motivation. (See link here: https://www.maths.ed.ac.uk/~tl/gt/gt.pdf )

This playlist on Galois Theory by Professor Richard Borcherds is a gem. It explains Galois Theory from the ground up, rigorously, in almost complete generality. ( https://www.youtube.com/playlist?list=PL8yHsr3EFj53Zxu3iRGMYL_89GDMvdkgt  )

(b) Group Theory

Group Theory lectures: This playlist by Professor Benedict Gross is a beauty. It goes through the entire group theory syllabus from the ground up, and Professor Gross is a masterful lecturer. (see link here: https://www.youtube.com/playlist?list=PLelIK3uylPMGzHBuR3hLMHrYfMqWWsmx5 )

Intro: (0:00)
What is the square root of 2?: (1:08)
Fields and Automorphisms: (6:04)
Examples: (8:55)
Group Theory: (16:34)
The Fundamental Theorem: (18:25)

Subscribe: https://www.youtube.com/c/Aleph0/featured 

#calculator #maths #mathematics 

野村  陽一

野村 陽一

1638638400

ReactフックとTypeScriptを使用してTodoリストアプリを構築する

何かを学ぶための最良の方法は、行うことです。このチュートリアルは、ReactフックとTypeScriptを使用して独自のtodoリストアプリを構築する方法を学ぶのに役立ちます。この簡単なチュートリアルを試して、独自のToDoリストアプリを作成し、JavaScript、React、TypeScriptを改善してください。
 

コードは私のGitHubにあります

ブリーフィング

このチュートリアルの目標は、独自のToDoリストアプリを作成することです。アプリ全般について。このtodoリストアプリは非常にシンプルなインターフェースを備えており、todoの作成、チェックオフ、削除など、最も重要な機能に焦点を当てています。コードについて。ReactフックとReactフック、主にuseStateフックを使用します。

useRefフックも使用する場合があります。このToDoリストアプリは状態を管理するためにReactフックを利用するため、クラスコンポーネントを使用する必要はありません。したがって、このアプリは機能コンポーネントのみを使用してビルドします。ToDoリストアプリのスタイル設定に関しては、外部のCSSスタイルシートを使用します。

最後にもう1つ。まず、すべてのtodoアイテムには一意のIDがあります。これらのIDは、todoアイテムの作成時に生成されます。このIDを使用して、todoを完了としてマークするか、削除します。これを簡単にするために、グッドプラクティスに従い、インデックスの使用を避けながら、shortidパッケージを使用します。

プロジェクトの設定

まず最初に、ToDoリストアプリの基本的なアプリを作成しましょう。create-react-app使用すると、これを非常に高速に実行できます。あなたは、このパッケージを使用することができnpm init react-app react-hooks-todo-list-app-ts --typescriptnpx create-react-app react-hooks-todo-list-app-ts --typescriptまたはyarn create react-app react-hooks-todo-list-app-ts --typescript。TypeScriptを使用したくない場合--typescriptは、コマンドの最後にあるフラグを省略してください。

これらのコマンドは、ワークフローのセットアップとほとんどすべての必要な依存関係を備えた、ToDoリストアプリの開始テンプレートを作成します。手動でインストールする必要がある依存関係が1つありshortidます。それは、このパッケージのとタイプです。だから、使用npm i shortidしてnpm i -D @types/shortidyarn add shortid及びyarn add -D @types/shortidまたはpnpm i shortidpnpm i -D @types/shortid

アプリテンプレートに付属しているReactロゴなどのアセットがいくつかあります。あなたはそれを必要としないのであなたはそれを取り除くことができます。非常に単純なバージョンは、次のpackage.jsonようになります。

{
  "name": "react-todo-list-hooks-ts",
  "version": "1.0.0",
  "description": "Simple Todo list app built with React hooks and TypeScript.",
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ],
  "main": "src/index.tsx",
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "dependencies": {
    "react": "16.11.0",
    "react-dom": "16.11.0",
    "shortid": "2.2.15"
  },
  "devDependencies": {
    "@types/react": "16.9.11",
    "@types/react-dom": "16.9.4",
    "@types/shortid": "^0.0.29",
    "react-scripts": "3.2.0",
    "typescript": "3.7.2"
  }
}

TypeScriptを使用する場合は、次のようにtsconfigなります。

{
    "include": [
        "./src/*"
    ],
    "compilerOptions": {
        "lib": [
            "dom",
            "es2015"
        ],
        "jsx": "react",
        "target": "es5",
        "allowJs": true,
        "skipLibCheck": true,
        "esModuleInterop": true,
        "allowSyntheticDefaultImports": true,
        "strict": true,
        "forceConsistentCasingInFileNames": true,
        "module": "esnext",
        "moduleResolution": "node",
        "resolveJsonModule": true,
        "isolatedModules": true,
        "noEmit": true
    }
}

最後に、このToDoリストアプリプロジェクトの最終的な構造を以下に示します。このチュートリアルで作業するときにこれを使用して、自分の方向を決めることができます。これで、ToDoリストアプリの作業を開始する準備が整いました。

react-hooks-todo-list-app-ts/
├─node_modules
├─public
│ ├─favicon.ico
│ ├─index.html
│ ├─manifest.json
│ └─robots.txt
├─src
│ ├─components
│ │ ├─todo-form.tsx
│ │ ├─todo-item.tsx
│ │ └─todo-list.tsx
│ ├─styles
│ │ └─styles.css
│ ├─index.tsx
│ ├─interfaces.ts
│ └─react-app-env.d.ts
├─ package.json
└─ tsconfig.json

インターフェース

最初に行うことは、ToDoリストアプリのインターフェースを作成することです。それらを使用して、コンポーネントpropstodoオブジェクトの形状を定義したり、それらを入力したりします。TypeScriptの代わりに純粋なJavaScriptを使用することにした場合は、この手順をスキップできます。4つのインターフェースを作成する必要があります。

1つはtodo(todoオブジェクト)用、1つはtodoフォーム用、1つはtodoリスト用、もう1つはtodoアイテム用です。todoオブジェクトには、3つのプロパティを持つことになりますidtextisCompletedTodoForm小道具のアレイ含むtodoオブジェクト及びhandleTodoCreate方法を。TodoList小道具が含まれていますhandleTodoUpdatehandleTodoRemovehandleTodoCompleteおよびhandleTodoBlurメソッドとの配列todoオブジェクトを。

TodoItem小道具が含まれていますhandleTodoUpdatehandleTodoRemovehandleTodoCompletehandleTodoBlurおよび単一todoのオブジェクト。

// Todo interface
export interface TodoInterface {
  id: string;
  text: string;
  isCompleted: boolean;
}

// Todo form interface
export interface TodoFormInterface {
  todos: TodoInterface[];
  handleTodoCreate: (todo: TodoInterface) => void;
}

// Todo list interface
export interface TodoListInterface {
  handleTodoUpdate: (event: React.ChangeEvent<HTMLInputElement>, id: string) => void;
  handleTodoRemove: (id: string) => void;
  handleTodoComplete: (id: string) => void;
  handleTodoBlur: (event: React.ChangeEvent<HTMLInputElement>) => void;
  todos: TodoInterface[]
}

// Todo item interface
export interface TodoItemInterface {
  handleTodoUpdate: (event: React.ChangeEvent<HTMLInputElement>, id: string) => void;
  handleTodoRemove: (id: string) => void;
  handleTodoComplete: (id: string) => void;
  handleTodoBlur: (event: React.ChangeEvent<HTMLInputElement>) => void;
  todo: TodoInterface;
}

Todoアイテムコンポーネント

最初に作成するコンポーネントは、todoアイテムです。ToDoリストに新しいToDoを追加すると、このアイテムコンポーネントがそれを表します。このコンポーネントは、いくつかの要素で構成されます。まず、todoをチェックするためのdivwithspan要素があります。チェックされていないアイテムには、境界線のある透明な円にスタイル設定された空のスパンが含まれます。

チェックされたToDoアイテムにはspan、緑色の円の中にチェックマークの付いたHTMLエンティティが含まれます。ラッパーにdivonClick、todoをチェック/チェック解除するためのハンドラーがあります。次は。で別のものにdivなりinputます。このinput要素を使用して、todoのタイトルまたはテキストをレンダリングします。これは、input要素を使用してすべてのToDoアイテムを編集可能にする最も簡単な方法です。

を通過したオブジェクトvalueから、属性を介して行われるタイトルをtodo渡しますprops。これinputとは別に、これには2つのハンドラメソッドがあります。1つはforでonBlur、もう1つはforonChangeです。最後の要素も、div「x」エンティティ/アイコンが付いたものになります。この要素を使用して、todoアイテムを削除します。

これdivには1つのonClickハンドラーがあります。以前のすべてのデータ、およびハンドラーメソッドと同様に、これも完全な小道具に渡されます。

TypeScriptを使用する場合は、TodoItemInterfaceインターフェイスをインポートし、interfaces.tsそれを使用してpropsこのコンポーネントのタイプを入力します。この後、onChangeハンドラーをinput要素にReact.ChangeEvent<HTMLInputElement>アタッチしているため、要素にonChangeハンドラーを入力しinputます。

// Import dependencies
import * as React from 'react'

// Import interfaces
import { TodoItemInterface } from './../interfaces'

// TodoItem component
const TodoItem = (props: TodoItemInterface) => {
  return (
    <div className='todo-item'>
      <div onClick={() => props.handleTodoComplete(props.todo.id)}>
        {props.todo.isCompleted ? (
          <span className="todo-item-checked"></span>
        ) : (
          <span className="todo-item-unchecked" />
        )}
      </div>

      <div className="todo-item-input-wrapper">
        <input
          value={props.todo.text}
          onBlur={props.handleTodoBlur}
          onChange={(event: React.ChangeEvent<HTMLInputElement>) => props.handleTodoUpdate(event, props.todo.id)}
        />
      </div>

      <div className="item-remove" onClick={() => props.handleTodoRemove(props.todo.id)}>
        ⨯
      </div>
    </div>
  )
}

export default TodoItem

ToDoリストコンポーネント

ToDoリストは、作成する2番目のコンポーネントになります。このコンポーネントは非常にシンプルになります。このコンポーネントはTodoItem、作成したばかりの、およびtodoを介しpropsたオブジェクトの配列のハンドラーメソッドを受け入れます。コンポーネント自体にはdiv、ラッパー要素として1つ含まれます。

この中divにはリスト、1つのul要素があります。この要素内でmap()は、todoオブジェクトの配列を反復処理し、オブジェクトごとにli1つのTodoItemコンポーネントを持つ1つの要素を作成するために使用しtodoます。次に、ハンドラーメソッドとともに、個々のtodoオブジェクトをTodoItemコンポーネントに渡します。

活字体の場合、輸入に覚えTodoListInterfaceインタフェースと入力し、それを使用propsするTodoListコンポーネントを。

// Import dependencies
import * as React from 'react'

// Import TodoItem
import TodoItem from './todo-item'

// Import interfaces
import { TodoListInterface } from './../interfaces'

// TodoList component
const TodoList = (props: TodoListInterface) => {
  return (
    <div className="todo-list">
      <ul>
        {props.todos.map((todo) => (
          <li key={todo.id}>
            <TodoItem
              todo={todo}
              handleTodoUpdate={props.handleTodoUpdate}
              handleTodoRemove={props.handleTodoRemove}
              handleTodoComplete={props.handleTodoComplete}
              handleTodoBlur={props.handleTodoBlur}
            />
          </li>
        ))}
      </ul>
    </div>
  )
}

export default TodoList

Todoフォームコンポーネント

ToDoの「フォーム」は、useStateReactフックを使用する最初のコンポーネントです。useRefReactフックを使用する場所でもあります。新しいtodoアイテムを作成する前に、useStateフックを使用して、input要素に渡されたテキスト、todoタイトルのテキストを保存します。

useRefフックを使用して、この入力への参照を保存します。新しいToDoを作成する方法は、「Enter」キーを押しながら、その入力内にテキストを入力することです。したがって、「Enter」キーを押すと、値を空の文字列に設定することにより、この参照を使用して入力をリセットします。この入力には、との2つのハンドラメソッドもonChangeありonKeyPressます。

これら二つのハンドラメソッドは次のようになりますhandleInputChangehandleInputEnter。1つ目はonChange、入力に何かを書き込んだときにフォームの状態を更新します。いくつかのToDoタイトル/テキストです。2つ目は、の場合onKeyPress、新しいtodoオブジェクトを作成し、「Enter」キーの押下を検出すると入力フィールドをリセットします。

shortidパッケージを覚えていますか?ここで、この依存関係を使用します。内部handleInputEnter機能、新しい内部のtodoオブジェクト、あなたが使用するshortidユニーク生成するidすべての新しいTODOのために。心配しないでください。これは簡単です。必要なのは、呼び出すことですgenerate()shortidして、新しいはid準備ができています。

最後に、TypeScriptのいくつかのこと。まず、インポートTodoInterfaceTodoFormInterfaceインターフェース。次いで、使用TodoInterface新しい入力するインターフェースをtodoオブジェクト内をhandleInputEnter、そしてTodoFormInterface入力するためのインタフェースpropsTodoForm。次に、useRefを使用してフックを入力し<HTMLInputElement>、に設定しnullます。

その後、2つのイベントもあります。1つ目は、要素にハンドラーをReact.ChangeEvent<HTMLInputElement>アタッチしているため、で入力できます。2つ目は、キーの押下を「リッスン」しているため、で入力できます。onChangeinputReact.KeyboardEvent

// Import dependencies
import * as React from 'react'
import shortid from 'shortid'

// Import interfaces
import {TodoInterface, TodoFormInterface} from './../interfaces'

// Todo form component
const TodoForm = (props: TodoFormInterface) => {
  // Create ref for form input
  const inputRef = React.useRef<HTMLInputElement>(null)

  // Create form state
  const [formState, setFormState] = React.useState('')

  // Handle todo input change
  function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {
    // Update form state with the text from input
    setFormState(event.target.value)
  }

  // Handle 'Enter' in todo input
  function handleInputEnter(event: React.KeyboardEvent) {
    // Check for 'Enter' key
    if (event.key === 'Enter') {
      // Prepare new todo object
      const newTodo: TodoInterface = {
        id: shortid.generate(),
        text: formState,
        isCompleted: false
      }

      // Create new todo item
      props.handleTodoCreate(newTodo)

      // Reset the input field
      if (inputRef && inputRef.current) {
        inputRef.current.value = ''
      }
    }
  }

  return (
    <div className="todo-form">
      <input
        ref={inputRef}
        type="text"
        placeholder='Enter new todo'
        onChange={event => handleInputChange(event)}
        onKeyPress={event => handleInputEnter(event)}
      />
    </div>
  )
}

export default TodoForm

メイン(インデックス)コンポーネント

ほぼ完了です。構築する必要のあるコンポーネントは1つだけです。これがTodoListApp主成分です。このコンポーネントは、ToDoを作成、更新、削除、および完了するためのメソッドを実装します。これは、を介して行われますhandleTodoCreatehandleTodoUpdatehandleTodoRemoveおよびhandleTodoComplete方法。

useStateReactフックを使用して、既存のすべてのToDoを保存するのもこのコンポーネントです。それでは、このコンポーネントを段階的に構築してみましょう。

輸入

まず、通常どおり、の依存関係をインポートする必要がありますreact。ここで、renderからメソッドをインポートする必要もありますreact-dom。これは、TodoListAppコンポーネントであるToDoリストアプリをDOMでレンダリングするためです。

またTodoFormTodoListコンポーネントをインポートして、後でそれらを返し、レンダリングできるようにします。これらのコンポーネントをインポートするときは、メインの外部CSSスタイルシートもインポートする必要があります。これにより、後でToDoリストアプリのスタイルを設定できます。

TypeScriptの場合、TodoInterfaceインターフェイスをインポートする必要があります。このインターフェースを数回使用して、todos状態といくつかのメソッドパラメーターを入力します。

// Import dependencies
import * as React from 'react'
import { render } from 'react-dom'

// Import components
import TodoForm from './components/todo-form'
import TodoList from './components/todo-list'

// Import interfaces
import { TodoInterface } from './interfaces'

// Import styles
import './styles/styles.css'

ToDoリストアプリの状態を作成する

ToDoリストアプリの状態はシンプルになります。オブジェクトの配列になります。1つのオブジェクトは1つの既存のToDoを表します。最初に、todos状態を空の配列として初期化します。

TypeScriptの場合は、必ずTodoInterfaceインターフェイスを[]。と一緒に使用してください。これにより、1つのtodoオブジェクトだけでなく、todosオブジェクトの配列について「話している」ことがTypeScriptに通知されます。

// TodoListApp component
// ....
const TodoListApp = () => {
  const [todos, setTodos] = React.useState<TodoInterface[]>([])
  // ...
}

新しいtodoの作成

ToDoリストアプリの最初のメソッドは、新しいToDoを作成するhandleTodoCreateメソッドメソッドです。このメソッドは、1つのパラメーターであるtodoオブジェクトを受け入れます。それが機能する方法は簡単です。まず、newTodosState現在のtodoリストアプリの状態をコピーして、新しいtodoリストアプリの状態を作成します。

次に、todoオブジェクトを取得し、このメソッドを呼び出すときにパラメーターとして渡し、それtodoを新しいtodoリストアプリの状態であるnewTodosState、usingpush()メソッドに追加します。その後、setTodos()メソッドを使用して、ToDoリストアプリの状態を更新します。

TypeScriptについて。TodoInterfaceインターフェイスを使用してtodoパラメータを入力します。また、このインターフェースを使用してnewTodosState変数を入力します。この場合、todoオブジェクトの配列が必要であることを再度指定し、の[]後に追加しTodoInterfaceます。

  // ....
  // Creating new todo item
  function handleTodoCreate(todo: TodoInterface) {
    // Prepare new todos state
    const newTodosState: TodoInterface[] = [...todos]

    // Update new todos state
    newTodosState.push(todo)

    // Update todos state
    setTodos(newTodosState)
  }
  // ....

既存のToDoを更新する

次に、既存のタスクを更新するhandleTodoUpdateメソッド、メソッドが必要になります。この方法は、2つのパラメータを受け入れ、でしょうeventidid一意になりid、すべてのTODOアイテム/オブジェクトに対して生成さ。と同様にhandleTodoCreate、このメソッドもnewTodosState、現在のtodoリストアプリの状態をコピーして、新しいtodoリストアプリの状態を作成することから始まります。

次に、find()メソッドを使用してnewTodosState変数を反復処理し、id渡された引数を使用して、更新する正しいToDoアイテムを見つけます。正しいtodoアイテム/オブジェクトが見つかると、textキーの値が変更されます。Newvalueは、特定のtodoアイテム内の入力の値から取得されます。

最後のステップはnewTodosStatesetTodos()メソッドを使用して、ToDoリストアプリの状態を更新することです。

TypeScriptの場合、TodoInterfaceインターフェイスを使用して、メソッドにtodo渡されるパラメーターを入力しますfind()。の後newTodosStateと一緒に、変数にも使用します。最後に、パラメータをとして入力します。[]TodoInterfaceidstring

  // ....
  // Update existing todo item
  function handleTodoUpdate(event: React.ChangeEvent<HTMLInputElement>, id: string) {
    // Prepare new todos state
    const newTodosState: TodoInterface[] = [...todos]

    // Find correct todo item to update
    newTodosState.find((todo: TodoInterface) => todo.id === id)!.text = event.target.value

    // Update todos state
    setTodos(newTodosState)
  }
  // ....

既存のToDoを削除する

ToDoの削除は、filter()メソッドを使用して実行されます。まず、newTodosState現在のToDoリストアプリの状態をコピーして、新しいToDoリストアプリの状態を作成します。この間、このfilter()メソッドを使用して、削除するToDoを削除します。これはid、すべてidのtodoを削除するtodoと比較することによって行われます。

これが完了すると、この新しいフィルタリングされたtodos状態を使用して、setTodos()メソッドで状態を更新します。

TypeScriptの場合、TodoInterfaceインターフェイスを使用して、メソッドにtodo渡されるパラメーターを入力しますfilter()。次に、。の後newTodosStateと一緒に、変数にも使用します。最後に、パラメータをとして入力します。[]TodoInterfaceidstring

  // ....
  // Remove existing todo item
  function handleTodoRemove(id: string) {
    // Prepare new todos state
    const newTodosState: TodoInterface[] = todos.filter((todo: TodoInterface) => todo.id !== id)

    // Update todos state
    setTodos(newTodosState)
  }
  // ....

ToDoの完了

ToDoを完了する方法は、方法と非常によく似ていhandleTodoUpdateます。まず、現在のToDoリストアプリの状態をコピーしてnewTodosState変数に保存します。次に、find()メソッドを使用して、todos状態内の特定のToDoアイテム/オブジェクトを検索します。

今回isCompletedは、特定のToDoアイテム/オブジェクトのキーの値を無効にします。この後、setTodosメソッドを使用してtodos状態を更新します。

さて、TypeScriptについて。まず、TodoInterfaceインターフェースを使用して、メソッドにtodo渡されるパラメーターを入力しますfind()。次に、このインターフェイスをnewTodosState変数にも使用します。これも。の[]後に付けTodoInterfaceます。最後のタイプはid。用になります。これはになりますstring

  // ....
  // Check existing todo item as completed
  function handleTodoComplete(id: string) {
    // Copy current todos state
    const newTodosState: TodoInterface[] = [...todos]

    // Find the correct todo item and update its 'isCompleted' key
    newTodosState.find((todo: TodoInterface) => todo.id === id)!.isCompleted = !newTodosState.find((todo: TodoInterface) => todo.id === id)!.isCompleted

    // Update todos state
    setTodos(newTodosState)
  }
  // ....

すべてのtodoにタイトルがあることを確認する

最後のこと。既存のToDoを編集するときに、テキスト/タイトルを空のままにすると、警告が表示されるはずです。これを行うために、inputすべてのToDo内の要素の変更を見ることができます。その後、あなたはそのを確認することができvalue、空の文字列ではないlengthのは、value「0」よりも大きいです。

空の文字列がある場合は、特定のCSSクラスを追加します。テキストを入力すると、そのCSSクラスが削除されます。このCSSクラスは、入力を赤い境界線でマークします。このクラスは、後でCSSスタイルシートで定義します。

いつものように、TypeScript。これは迅速になります。入力する必要があるのeventは、パラメーターとして渡されることだけです。要素にonChangeイベントハンドラーをアタッチしているのでinput、を使用できますReact.ChangeEvent<HTMLInputElement>

  // ....
  // Check if todo item has title
  function handleTodoBlur(event: React.ChangeEvent<HTMLInputElement>) {
    if (event.target.value.length === 0) {
      event.target.classList.add('todo-input-error')
    } else {
      event.target.classList.remove('todo-input-error')
    }
  }
  // ....

すべてのコンポーネントを返す

ToDoリストアプリはほぼ完成しています。ここで、これまでに作成し、コンポーネントにインポートしたすべてのコンポーネントを取得して、それらを返す必要があります。すべてのコンポーネントに必要なものを必ず提供してくださいprops。その後、render()メソッドを使用TodoListAppしてDOMでレンダリングできます。

  // ...
  return (
    <div className="todo-list-app">
      {/* Todo form component */}
      <TodoForm
        todos={todos}
        handleTodoCreate={handleTodoCreate}
      />

      {/* Todo list component */}
      <TodoList
        todos={todos}
        handleTodoUpdate={handleTodoUpdate}
        handleTodoRemove={handleTodoRemove}
        handleTodoComplete={handleTodoComplete}
        handleTodoBlur={handleTodoBlur}
      />
    </div>
  )
}

// Render the App in the DOM
const rootElement = document.getElementById('root')
render(<TodoListApp />, rootElement)

すべてを一緒に入れて

あなたはこの主要なコンポーネントでたくさんのコードを書きました。より明確にするために、すべてをまとめましょう。

// Import dependencies
import * as React from 'react'
import { render } from 'react-dom'

// Import components
import TodoForm from './components/todo-form'
import TodoList from './components/todo-list'

// Import interfaces
import { TodoInterface } from './interfaces'

// Import styles
import './styles/styles.css'

// TodoListApp component
const TodoListApp = () => {
  const [todos, setTodos] = React.useState<TodoInterface[]>([])

  // Creating new todo item
  function handleTodoCreate(todo: TodoInterface) {
    // Prepare new todos state
    const newTodosState: TodoInterface[] = [...todos]

    // Update new todos state
    newTodosState.push(todo)

    // Update todos state
    setTodos(newTodosState)
  }

  // Update existing todo item
  function handleTodoUpdate(event: React.ChangeEvent<HTMLInputElement>, id: string) {
    // Prepare new todos state
    const newTodosState: TodoInterface[] = [...todos]

    // Find correct todo item to update
    newTodosState.find((todo: TodoInterface) => todo.id === id)!.text = event.target.value

    // Update todos state
    setTodos(newTodosState)
  }

  // Remove existing todo item
  function handleTodoRemove(id: string) {
    // Prepare new todos state
    const newTodosState: TodoInterface[] = todos.filter((todo: TodoInterface) => todo.id !== id)

    // Update todos state
    setTodos(newTodosState)
  }

  // Check existing todo item as completed
  function handleTodoComplete(id: string) {
    // Copy current todos state
    const newTodosState: TodoInterface[] = [...todos]

    // Find the correct todo item and update its 'isCompleted' key
    newTodosState.find((todo: TodoInterface) => todo.id === id)!.isCompleted = !newTodosState.find((todo: TodoInterface) => todo.id === id)!.isCompleted

    // Update todos state
    setTodos(newTodosState)
  }

  // Check if todo item has title
  function handleTodoBlur(event: React.ChangeEvent<HTMLInputElement>) {
    if (event.target.value.length === 0) {
      event.target.classList.add('todo-input-error')
    } else {
      event.target.classList.remove('todo-input-error')
    }
  }

  return (
    <div className="todo-list-app">
      <TodoForm
        todos={todos}
        handleTodoCreate={handleTodoCreate}
      />

      <TodoList
        todos={todos}
        handleTodoUpdate={handleTodoUpdate}
        handleTodoRemove={handleTodoRemove}
        handleTodoComplete={handleTodoComplete}
        handleTodoBlur={handleTodoBlur}
      />
    </div>
  )
}

const rootElement = document.getElementById('root')
render(<TodoListApp />, rootElement)

スタイル

ToDoリストアプリの準備が整いました。よくほとんど。いくつかのスタイリングのためのスペースがたくさんあります。ToDoリストアプリの見栄えを良くするために使用できるスタイルを次に示します。

/* Default styles*/
html {
  box-sizing: border-box;
}

*,
*::before,
*::after {
  box-sizing: inherit;
}

#root,
body {
  min-height: 100vh;
}

body {
  margin: 0;
}

#root,
.todo-list-app {
  display: flex;
  flex-flow: column nowrap;
}

#root {
  align-items: center;
  width: 100%;
}

/* Todo list app styles  */
.todo-list-app {
  padding-top: 32px;
  width: 100%;
  max-width: 480px;
}

/* Todo form styles */
.todo-form input,
.todo-item {
  border: 1px solid #ececec;
}

.todo-form input {
  padding: 0 14px;
  width: 100%;
  height: 48px;
  transition: .25s border ease-in-out;
}

.todo-form input:focus {
  outline: 0;
  border: 1px solid #3498db;
}

/* Todo list styles */
.todo-list ul {
  padding: 0;
  margin: 0;
}

.todo-list li {
  list-style-type: none;
}

/* Todo item styles */
.todo-item {
  display: flex;
  flex-flow: row nowrap;
  align-items: center;
  padding: 8px;
}

.todo-form + .todo-list ul .todo-item {
  border-top: 0;
}

.todo-item-input-wrapper {
  flex-grow: 1;
  padding: 0 16px;
}

.todo-item input {
  width: 100%;
  border: 0;
  border-bottom: 1px solid transparent;
  transition: .25s border-bottom ease-in-out;
}

.todo-item input:focus {
  outline: 0;
  border-bottom: 1px solid #3498db;
}

.todo-item .todo-input-error {
  border-bottom: 1px solid #e74c3c;
}

.todo-item span {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  border: 1px solid #ececec;
  transition: .25s all ease-in-out;
}

.todo-item-unchecked:hover {
  background: hsla(168, 76%, 42%, .25);
  border: 1px solid hsl(168, 76%, 42%, .25);
}

.todo-item-checked {
  color: #fff;
  background: #1abc9c;
  border: 1px solid #1abc9c;
}

.item-remove {
  display: flex;
  padding-left: 8px;
  padding-right: 8px;
  font-size: 28px;
  cursor: pointer;
  line-height: 1;
  color: #ececec;
  transition: .25s color ease-in-out;
}

.item-remove:hover {
  color: #111;
}

結論:ReactフックとTypeScriptを使用してTodoリストアプリを構築する方法

おめでとうございます。ReactフックとTypeScriptを使用して、独自のToDoリストアプリを作成しました。ただし、ここで停止する必要はありません。だから、どうぞ。このtodoリストアプリを取り、それをより良くしてください。どのような機能が必要かを考えてください。その後、何も待たないでください。自分で実装してみてください。楽しむ!

この記事が気に入ったら、今後の投稿を見逃さないように購読してください。


リンク: https://blog.alexdevero.com/todo-list-app-react-hooks-typescript/

#typescript #react-native 

How to Create an Image Clip Animation with Slider Controls using Only HTML & CSS

In this blog you’ll learn how to create an Image Clip Animation with Slider Controls using only HTML & CSS.

To create an Image Clip Animation with Slider Controls using only HTML & CSS. First, you need to create two Files one HTML File and another one is CSS File.

1: First, create an HTML file with the name of index.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Image Clip Animation | Codequs</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <div class="wrapper">
      <input type="radio" name="slide" id="one" checked>
      <input type="radio" name="slide" id="two">
      <input type="radio" name="slide" id="three">
      <input type="radio" name="slide" id="four">
      <input type="radio" name="slide" id="five">
      <div class="img img-1">
        <!-- <img src="images/img-1.jpg" alt="">
      </div>
      <div class="img img-2">
        <img src="images/img-2.jpg" alt="">
      </div>
      <div class="img img-3">
        <img src="images/img-3.jpg" alt="">
      </div>
      <div class="img img-4">
        <img src="images/img-4.jpg" alt="">
      </div>
      <div class="img img-5">
        <img src="images/img-5.jpg" alt="">
      </div>
      <div class="sliders">
        <label for="one" class="one"></label>
        <label for="two" class="two"></label>
        <label for="three" class="three"></label>
        <label for="four" class="four"></label>
        <label for="five" class="five"></label>
      </div>
    </div>
  </body>
</html>

2: Second, create a CSS file with the name of style.css

*{
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body{
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: -webkit-linear-gradient(136deg, rgb(224,195,252) 0%, rgb(142,197,252) 100%);
}
.wrapper{
  position: relative;
  width: 700px;
  height: 400px;
}
.wrapper .img{
  position: absolute;
  width: 100%;
  height: 100%;
}
.wrapper .img img{
  height: 100%;
  width: 100%;
  object-fit: cover;
  clip-path: circle(0% at 0% 100%);
  transition: all 0.7s;
}
#one:checked ~ .img-1 img{
  clip-path: circle(150% at 0% 100%);
}
#two:checked ~ .img-1 img,
#two:checked ~ .img-2 img{
  clip-path: circle(150% at 0% 100%);
}
#three:checked ~ .img-1 img,
#three:checked ~ .img-2 img,
#three:checked ~ .img-3 img{
  clip-path: circle(150% at 0% 100%);
}
#four:checked ~ .img-1 img,
#four:checked ~ .img-2 img,
#four:checked ~ .img-3 img,
#four:checked ~ .img-4 img{
  clip-path: circle(150% at 0% 100%);
}
#five:checked ~ .img-1 img,
#five:checked ~ .img-2 img,
#five:checked ~ .img-3 img,
#five:checked ~ .img-4 img,
#five:checked ~ .img-5 img{
  clip-path: circle(150% at 0% 100%);
}
.wrapper .sliders{
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 99;
  display: flex;
}
.wrapper .sliders label{
  border: 2px solid rgb(142,197,252);
  width: 13px;
  height: 13px;
  margin: 0 3px;
  border-radius: 50%;
  cursor: pointer;
  transition: all 0.3s ease;
}
#one:checked ~ .sliders label.one,
#two:checked ~ .sliders label.two,
#three:checked ~ .sliders label.three,
#four:checked ~ .sliders label.four,
#five:checked ~ .sliders label.five{
  width: 35px;
  border-radius: 14px;
  background: rgb(142,197,252);
}
.sliders label:hover{
  background: rgb(142,197,252);
}
input[type="radio"]{
  display: none;
}

Now you’ve successfully created an Image Clip Animation with Sliders using only HTML & CSS.

#html #css 

A Best Leading Matrimonial Website Development Company In India

Matrimonial Development

  1. Home
  2. Matrimonial Website Development

A Best Leading Matrimonial Website Development Company In India

Launching New Marriage Bureaus & Matrimonial Website With In 2 Days With Advanced Features For Grand Business Success Is Just A Call Away.

Matrimonial Website Design & Development Company In India

If you want to start a matrimonial business in India you need the best matrimonial website. It is one of the best and leading matrimonial website design, matrimonial website development companies in Coimbatore, Tamil Nadu, India. We make use of advanced technologies to make it an excellent experience for those seeking matchmaking services online. our matrimonial website provides a completely flexible and automated business solution to gain from this business opportunity in the fast-growing environment in India.

To Start Marriage Bureaus & Matrimonial Business Is Just A Call Away

We are the top best Matrimonial Portal Development Company, We are the best in the Market.

matrimonial web development

 

To Start Marriage Bureaus

UNLIMITED MEMBERS REGISTRATION

Two types of member types are available in our matrimonial website. free members & premium members. admin has full control over when new members registered on the website.

Online Payment Options

ONLINE PAYMENT OPTIONS

The payment gateway is integrated into the system so free members can pay money through an online transfer with debit cards, credit cards, net banking and became premium members and make use of advanced features in the matrimonial website.

Horoscope Profile Matching

HOROSCOPE PROFILE MATCHING

Members can generate horoscope birth charts and match the profile to get the result easily without astrologer help. with birth chart generator systems integrated into our matrimonial web application.

FUNCTIONALITY IS EXTREMELY IMPORTANT FOR MATRIMONY

Matrimonial Website With Unlimited Features

Software is a Coimbatore, India based matrimonial Web Development Company with a readymade matrimony website with the demo. If you are looking for the best matrimonial website development company in India. This is a very powerful online matrimony management software system that we’ve developed exclusively and user-friendly and should be the main features in the matrimonial portal.

MEMBERS

  • Two types of member options are available. Free Members & Premium Members. For Users

Free Members

#Root admin can get the list of all free member's information of each user. Admin can View the free member profiles, packages, followers, membership Information & also can block any Member any time he wishes.

Premium members

#Root admin can get the list of all premium members' information of registered members. admin can view the premium member profiles, packages, followers, membership duration, remaining premium package items & also can block any premium member any time.

Create Members By Admin

#Root Admin can create member profiles manually with all the basic information from his/her. Admin panel With Unique Profile ID for Every individual member registered by admin will get a unique member ID from the member Registration.

Member profile Attributes

Admin can Add, Edit Or Delete the following member attributes

  • Religion's
  • Caste
  • Sub-caste
  • Language
  • Family Status
  • Family Value
  • On Behalf
  • Country's
  • State's
  • City's

OUR MATRIMONY BUNDLED WITH ALL FUNCTIONALITY

To Start Online Matrimonial Website

  • Register / Login
  • Complete high-Security Website
  • Fully Customized and square admin panel
  • For all Regions and caste / sub-casts
  • Fully Custom Membership Plans
  • Mobile Responsive matrimonial website
  • Free Members Profile
  • Premium Members Profile
  • ecommerce Ready Website
  • Payments Invoices
  • Horoscope Systems
  • Fully customizable for your community
  • Admin can add/edit/delete/de-activate profiles.
  • Customer Support Ticketing System
  • Contact Messages
  • Online Payments Debit/Credit, Net banking
  • Email Setup
  • Sms Settings
  • Advanced Search Options
  • Search by Profile ID
  • Search-engine friendly Matrimonial Website
  • User-friendly Matrimonial Website
  • Family Info – Father, Mother name, status, etc.
  • Approve / Disapprove Members
  • Send private message to members
  • De-active OR BAN members any time

ELITE MATRIMONIAL WEBSITE FEATURES FOR A SUCCESSFUL BUSINESS

TOP & BEST MATRIMONY SOFTWARE COMPANY IN INDIA. 

USER FRIENDLY INTERFACE

Easy to navigate throughout the websites help brides and grooms use the websites easily find matches and communicate the profiles easily.

ADVANCED SEARCH OPTIONS

Advanced search options help brides and grooms to search the matching profile easily and find their perfect match profile for their life partner.

SEO-FRIENDLY WEBSITE

Our Matrimonial Websites are built for search engines in mind to bring more search visitors through search engines like google, bing, yahoo.

FULLY RESPONSIVE WEBSITE

Our Matrimony website is fully responsive it can be loaded faster in any device screen like mobile devices, tablets, and HD TV to Monitors. Our website will dynamically change to all devices.

MULTIPURPOSE MATRIMONY

A very powerful online matrimony management application system that we’ve developed exclusively and user-friendly. matchmaking, partner search, community-based wedding.

ON TIME DELIVERY

customized marriage bureaus & matrimonial Website for your business within 2 - 10 days no need to wait for a long time. we will deliver the matrimonial portal on time no delay.

AFFORDABLE PRICE

Matrimonial website designing is not a costly thing. You can build your own matchmaking matrimony website for an affordable price. We never compromise in quality.

FAST LOADING WEBSITE

When it comes to online speed is very important our Matrimonial website loads faster than any other matrimony website. Our speed score is 90 is based on the lab data analyzed.

ECOMMERCE READY WEBSITE

Our matrimony is the ecommerce Ready Website. so paid online like debit card, credit card, net banking, etc. free member can upgrade to Premium plan through an online payment.

We Develop Three Categories For Matrimonial Websites Development

We have three categories for matrimonial because every business owner wants different types of matrimony that's why we have three options for every matrimony business owner.

Basic Matrimonial

Basic Matrimonial

Only Basic Features Enabled

  • Basic Register / Login
  • Basic Admin Panel
  • Mobile Responsive Website
  • Contact Messages form Website
  • Search Options Enabled
  • Search by Profile ID Enabled
  • Email Setup
  • De-active OR BAN members
  • 1 year to support & updates

Premium Matrimonial

Premium Matrimonial

Premium Features Enabled

  • Premium Register / Login
  • Premium Admin Panel
  • Mobile Responsive Website
  • Free, Premium Members
  • ecommerce Ready Website
  • Advanced Search Options
  • Search-engine friendly
  • User-friendly Matrimonial
  • 2 year to support & updates

Enterprise Matrimonial

Enterprise Matrimonial

Elite Features Enabled

  • Ultimate Register / Login
  • Complete high-Security
  • ecommerce Ready Website
  • Payments Invoices
  • Horoscope Systems
  • Fully customizable Search-engine friendly
  • Advanced Search Options
  • OTP Login
  • 5 year to support & updates

MATRIMONAL MOBILE APP DEVELOPMENT COMPANIES IN COIMBATORE, INDIA

We provide end-to-end matrimonial mobile application design and development services in India. Incredible ideas require resources to get anything beyond the idea frame. That’s why we’ve built a process that can adapt to the needs of any client. want to work with a team that understands matrimonial service or business to build your app for success. you are in the right place to build your matrimonial app.

REQUEST A FREE CONSULTATION AND GET A NO OBLIGATION QUOTE FOR YOUR PROJECT WITHIN 8 BUSINESS HOURS

Lets build your next project Together!

WHAT ABOUT CUSTOMER SUPPORT & TECHNICAL SUPPORT?

We Have Dedicated Customer Service Support To Help

As a market leader in developing matrimonial website development in Coimbatore, India.  After developing matrimony completed. We aware Well Our customers need help from us like customer support and technical support frequently. So we provide an excellent and experienced team that will guide you and help you with your matrimonial website up and running without no issues.

We deliver high-quality premium customer support for matrimony service. We have a separate dedicated support developer team that will support all our clients. Our Support service is the developer team. So your issue and error will be solved within 15 Min we will take care of your website even at the weekend.

A 24/7 Premium Customer Team Will Be Delivered To All Our Clients For The Matrimonial Website.

Amber  Lubowitz

Amber Lubowitz

1626874500

What is CAP Theorem? Degrees of CAP theorem, use cases - System Design - Lecture 20

Errata: The middleware in the nodes diagram actually is network. Please read it network and not middleware.

Also, quite an important detail between 16:00 to 17:30. I promise it’s not fake engagement, just want to highlight it since I couldn’t break the video skip ahead tabs.

#theorem #cap theorem