Функцэд параметр дамжуулах

React -д үйл явцыг хэрхэн боловсруулах талаар гүнзгийрүүлэн судлая. Үүний тулд Car компонентийн кодод Дарах нэртэй товчийг

import React from 'react'

const car = props => <div>
  <h3>Машиний нэр: {props.name}</h3>
  <p>Он: <strong>{props.year}</strong></p>
  <button>Дарах</button>
</div>

export default car

нэмэн өгөөд хуудсаа харвал

гэж харагдана.

Зөвлөмж: Хичээлийн материалыг бүрэн ойлгохын тулд React JS сан хичээлийн багцыг бүхэлд нь үзэхийг зөвлөе.

Car компонентод Дарах нэртэй товч нэмэгдсэн хэдий ч ямарч үйл явцыг мэдрэхгүй. Тэгвэл Car компонентийн Дарах товчийг дарахад App компонент h1 гарчигаар үзүүлж байгаа текстийг өөрчлөх ажиллагааг оруулан ирье. Car компонент App компонентоос дуудагдахын дээр солих гэж буй pageTitle талбар App компонентод state обьектод байгаа нь үндсэн асуудал. Эхлээд хүүхэд компонентод үйл явцын боловсруулагчийг /функц/ хэрхэн дамжуулахыг App компонентийн render аргын

  render() {
    console.log('Render')
    const divStyle = {
      textAlign: 'center'
    }

    const cars = this.state.cars

    return (
      <div style={divStyle}>
        <h1>
          {this.state.pageTitle}
        </h1>
        <button onClick={this.changeTitleHandler}>Гарчиг өөрчлөх</button>
        <Car
          name={cars[0].name}
          year={cars[0].year}
          onChangeTitle={this.changeTitleHandler}
        />
        <Car
          name={cars[1].name}
          year={cars[1].year}
        />
        <Car
          name={cars[2].name}
          year={cars[2].year}
        />
      </div>
    )

кодоос харцгаая. Ердийн html элементийн хувьд үйл явцын боловсруулагчийг тавин өгөхийг Гарчиг өөрчлөх товч дээр үзүүлсэн. Харин react компонентийн хувьд өгөгдлийн загвар нь html элементийнхээс өөр тул энэ арга ажиллахгүй. App компонентийн Гарчиг өөрчлөх товчны боловсруулагч changeTitleHandler функцийг Car компонентод параметрээр дамжуулахдаа түүнийг ердийн функц шиг л дамжуулдаг. Параметрийн нэрийг үйл явцын нэртэй зохицуулан ямраар ч өгөх боломжтой. Кодод товчны даралтаар хийгдэх ажиллагаатай холбон onChangeTitle нэрийг өгсөн. Параметрийн утгаар өмнөхтэй ижил changeTitleHandler функцийн холбоосыг өгнө. Одоо дамжуулсан параметрт Car компонентод

const car = props => <div>
  <h3>Машиний нэр: {props.name}</h3>
  <p>Он: <strong>{props.year}</strong></p>
  <button onClick={props.onChangeTitle}>Дарах</button>
</div>

гэж хандана. Хүүхэд компонентийн үйл явцын сонсогч тавих элементэд Jsx атрибутын нэрээ өгөөд props -оор дамжин функцийн холбоосыг агуулсан ирсэн параметрийг өгөхөд л хангалттай. Ингэснээр react тухайн холбоосоор App компонентийн changeTitleHandler функцийг ажиллуулах юм. Өөрчлөлтийг хадгалаад хуудсаа нээгээд Гарчиг өөрчлөх, эхний машиний Дарах товчууд дээр дарвал

h1 гарчигаар үзүүлж байгаа текст өөрчлөгдөх болно. Дараагийн хоёр машиний Дарах товчууд үйл явцыг мэдрэхгүйн дээр h1 гарчигаар үзүүлж байгаа текстийн өөрчлөлтийг код дотор шууд нэмэх байдлаар хийсэн болохоор товч дарагдах бүрд гарчигт нэг ижил текстийг нэмсээр байгаа. Үүнийг арай илүү практик утгатай болгоё. Өөрөөр хэлбэл changeTitleHandler функцэд өөрчлөлт хаанаас хийгдэж байгаа параметрээр дамжуулан илүү ойлгомжтой болгох юм. changeTitleHandler функцийн хувьд

  changeTitleHandler = (newTitle) => {
    this.setState({
      pageTitle: newTitle
    })
  }

гэхэд л болно. changeTitleHandler функц параметр аваад түүгээр pageTitle төлвийг өөрчилнө. changeTitleHandler функцэд параметрийг хэрхэн дамжуулах вэ? Үүнийг хэрэгжүүлэх хоёр аргыг App компонентийн render аргын

  render() {
    console.log('Render')
    const divStyle = {
      textAlign: 'center'
    }

    const cars = this.state.cars

    return (
      <div style={divStyle}>
        <h1>
          {this.state.pageTitle}
        </h1>
        <button onClick={this.changeTitleHandler.bind(this, 'App өөрчлөлт')}>Гарчиг өөрчлөх</button>
        <Car
          name={cars[0].name}
          year={cars[0].year}
          onChangeTitle={this.changeTitleHandler.bind(this, cars[0].name)}
        />
        <Car
          name={cars[1].name}
          year={cars[1].year}
          onChangeTitle={() => this.changeTitleHandler(cars[1].name)}
        />
        <Car
          name={cars[2].name}
          year={cars[2].year}
          onChangeTitle={() => this.changeTitleHandler(cars[2].name)}
        />
      </div>
    )
  }

кодоос харцгаая. Эхнийх нь javascript функцэд байдаг bind аргыг ашиглах. bind арга шинэ функц буцаахаас түүнийг дуудаггүй тул параметр дамжуулах сайн арга. bind арга эхний параметрээр ажлуулахгүйгээр буцаах функцийг /context -ээр/ авдаг. Кодод өгсөн this бол changeTitleHandler функцийг зааж байгаа хэрэг. Дараа нь аргаас буцаагдах функцэд дамжуулах параметрүүдийг өгдөг. Энд App өөрчлөлт текстийг өгсөн. Ингэснээр Гарчиг өөрчлөх товч дээр дарахад changeTitleHandler функцийг App өөрчлөлт параметртэй дуудах функцийн холбоос үүсэх юм. Энэ аргаар эхний машиний Дарах товчны үйл явцыг боловсруулагч функцэд машиний нэрийг параметрээр дамжуулсан. Сүүлийн хоёр машиний Дарах товчны үйл явцыг боловсруулагчийг bind аргаар биш функцийн холбоос байдлаар дамжуулсан. Параметрийн утгаар сумаар тодорхойлогдох функцийг зарлаад түүн дотроос changeTitleHandler функцэд машиний нэрийг параметрээр өгөн дуудахыг заасан. Өөрчлөлтийг хадгалаад хуудсаа нээгээд Гарчиг өөрчлөх болон машинуудын Дарах товчууд дээр дарвал үйл явцын боловсруулагчид хаанаас дарагдсанг илтгэх параметрүүд очих тул h1 гарчигаар үзүүлж байгаа текстээс үйл явц хаана бий болсонг мэдэх боломжтой болсон нь харагдана.
Боловсруулагч функцэд параметр дамжуулж байгаа хоёр аргын алийг ч ашиглах боломжтой ч bind арга хөтөчөөс бага нөөцийг ашигладаг тул арай зөв хэлбэр юм. Хоёрдахь аргын хувьд хуудас зурагдах бүрд функцийг дуудах шинэ функцийг үүсгэх болно. Програм жижигхэн байхад энэ нь нэг их нөлөөгүй ч аргыг олон хэрэглэвэл програмийн бүтээмжид айхтар биш ч нөлөөлөх талтай.

Мэдээлэл таалагдсан бол найзуудтайгаа хуваалцаарай.

  Нээгдсэн тоо: 297 Төлбөртэй

Сайтын чиглүүлэгчид байхгүй эсхүл хуудас олдоогүй гэх мэтийн тохиолдолд хэрэглэгчдийг тохирох хуудаст шилжүүлэх хэрэгтэй болдог. Үүнийг redirect буюу шилжүүлэлт гэдэг. Vuejs -ийн шилжүүлэлтийн механизм хэрхэн ажилладагийг энэ хичээлээр авч үзье. Үүний тулд програмийн чиглүүлэгчдийн тодорхойлолтод

...
export default new VueRouter({
  routes: [
    {
      path: '',  
      component: Home
    },
    ...
    {
      path: '/none',
      redirect: '/cars'
    }
  ],
  ...
})

none гэсэн чиглүүлэгчийг үүсгээд түүнд хандвал cars хуудаст шилжүүлнэ гэдгийг redirect: '/cars' гэж заан өгье.

  Нээгдсэн тоо: 691 Төлбөртэй

RxJs сангийн бүрэлдхүүнд багтдаг Observable классаас бусад классуудын талаар авч үзье. Өмнөх хичээлүүдэд бид Observable гэж юу болох түүнтэй хэрхэн ажиллах талаар л үзсэн. RxJs санд Observable классаас гадна өөр хоорондоо ялгаатай төрөл бүрийн зүйлийг үүсгэх зарим классууд байдаг. Энэ хичээлээр эдгээр классуудын талаар дурдах болно. Классуудын ажиллагаа Observable -той төстэй ч багахан ялгаанууд бий.

Санамж: Програмчлалын хэлний ажиллагааны үндсэн суурь зарчмууд өөр хоорондоо нэг их зөрөөд байдаггүй. Компьютер, үйлдлийн системүүд ч мөн адил олон янзын брендүүд байх ч ажиллагааны ерөнхий зарчим нэг. Иймээс олон хэл судлахын оронд нэг хэлний технологийн шийдлийг гүн ойлговол бусдыг төвөггүй эзэмшинэ.

  Нээгдсэн тоо: 352 Бүртгүүлэх

Хичээлээр react -ийн хамгийн чухал бөгөөд хэрэгтэй хукуудийн нэг болох useCallback -ийн талаар авч үзье. Хукийн судалгааг дараах

import React, {useState} from 'react'

function App() {
  const [colored, setColored] = useState(false)
  const [count, setCount] = useState(1)
    
  const styles = {
      color: colored ? 'darkred' : 'black'
  }
    
  return (
      <div className="container">
        <h1 style={styles}>Элементийн тоо: {count}</h1>
        <button className={'btn btn-success mx-3'} onClick={() => setCount(prev => prev + 1)}>Нэмэх</button>
        <button className={'btn btn-warning mx-3'} onClick={() => setColored(prev => !prev)}>Өөрчлөх</button>
      </div>
  );
}

export default App;

кодоор авч үзье. Компонентийн код логикийн хувьд өмнөх хичээлүүдийнхтэй бараг ижил тул тайлбарлах нь илүүц гэж үзлээ.

  Нээгдсэн тоо: 438 Нийтийн

Компонентийн төлвийн өөрчлөлтийг хийх setState арга ансинхрон ажиллагаатай тул төлвийн өөрчлөлтийг зөв хийж сурах хэрэгтэй. Үүнийг Фрагмент хичээлд үүсгэсэн

import React, { Component } from 'react'

export default class Counter extends Component {
  state = {
    counter: 0
  }
  addCounter = () => {
    this.setState({
      counter: this.state.counter + 1
    })
  }
  render() {
    return (
      <div>
        <h2>Тоолуур {this.state.counter}</h2>
        <button onClick={this.addCounter}>+</button>
        <button onClick={() => this.setState({ counter: this.state.counter - 1 })}>-</button>
      </div>
    )
  }
}

Counter компонентийн жишээн дээр авч үзье.

Үйл явдал /event/ тодорхой үйлдэл хийгдсэн талаар системд мэдэгддэг. Хэрвээ бид энэхүү үйлдлийг ажиглах хэрэгтэй бол яг энд…

Нээгдсэн тоо : 139

 

Манай төсөл олон хуудсуудтай болон тэдгээрийн хооронд динамикаар шилжилт хийж байгаа ч тухайн үед шилжилт хийгдсэн хуудаст тохирох…

Нээгдсэн тоо : 201

 

Зочин (Visitor) паттерн классуудыг өөрчлөхгүйгээр тэдгээрийн обьектуудын үйлдлийг тодорхойлох боломжийг олгоно. Зочин хэвийг ашиглахдаа классуудын хоёр ангилалыг тодорхойлно.…

Нээгдсэн тоо : 169

 

Лямбда-илэрхийлэл нь нэргүй аргын хураангуй бичилтийг илэрхийлнэ. Лямбда-илэрхийлэл утга буцаадаг, буцаасан утгыг өөр аргын…

Нээгдсэн тоо : 292

 

Кодийн сайжруулалт /рефакторинг/ хичээлээр програмийн кодоо react -ийн зарчимд нийцүүлэн компонентод салгасан.…

Нээгдсэн тоо : 320

 

Хадгалагч (Memento) хэв обьектын дотоод төлвийг түүний гадна гаргаж дараа нь хайрцаглалтын зарчмыг зөрчихгүйгээр обьектыг сэргээх боломжийг олгодог.

Нээгдсэн тоо : 325

 

Делегаттай нэргүй арга нягт холбоотой. Нэргүй аргуудыг делегатийн хувийг үүсгэхэд ашигладаг.
Нэргүй аргуудын тодорхойлолт delegate түлхүүр үгээр…

Нээгдсэн тоо : 398

 

Математикт харилцан урвуу тоонууд гэж бий. Ямар нэгэн тооны урвуу тоог олохдоо тухайн тоог сөрөг нэг зэрэг дэвшүүлээд…

Нээгдсэн тоо : 399

 

Төсөлд react-router-dom санг оруулан чиглүүлэгчдийг бүртгүүлэн тохируулсан Санг суулган тохируулах хичээлээр бид хуудас…

Нээгдсэн тоо : 472

 
Энэ долоо хоногт

KLM суурьтай, KL=1, KK1=d талтай KLL1K1 тэгш өнцөгт хажуу бүхий KLMK1L1M1 призм өгөгджээ. KL_|_KM, LMM1 , KMM1 хавтгайнуудын хоорондын өнцөг 60°, бол утганд призмд түүний бүх талыг шүргэх шаарыг багтааж болно.

Нээгдсэн тоо : 1810

 

тоонд хуваахад гарах тооны аравтын бичлэгт "0" цифр хэдэн удаа орох вэ?

Нээгдсэн тоо : 1510

 

Нээгдсэн тоо : 1491