改訂ベース3)
import export
export defaultは一度しか使用できません.
export変数の多くはexportできます
//common.js
module.exports = a;
//es 5構文
export default a;
export const a;
2つは互換性があると考えられます.
nodeの文法は通用する.jsと呼ぶ
.jsxでwebpackを使用してseo importを使用すればいいです.
webpack.config.jsでimportを使用するのは互換性がありません.
これはbabelがこのような互換性を生むからです.
反復文マッピングへの応答
{['바나나', '포도', '사과', '딸기', '귤'].map( (v) => {
return (
<li>{v}</li>
);
})}
バナナぶどう
りんご
いちご
みかん
現れます.
JavascriptのMap関数を使用して反作用に適用する例
React key
一意のキー値を取得し、繰り返し文に入れる必要があります.
<li key={v.fruit + v.taste}><b>{v.fruit}</b> - {v.taste}</li>
keyのインバースアクティビティは、パフォーマンスの最適化に使用され、
map( (v, i) => {
return (
<li key={i}><b>{v.fruit}</b> - {v.taste}</li>
);
})
iを使用してkeyを作成する場合は、reactでkeyを使用して別名を追加するか、削除を修正するときに判断し、配列順が変わると問題が発生する可能性があります.
つまり、この方法は使えない.
React Props
読みやすさを向上させ、パフォーマンスを最適化するために、コンポーネントとして個別に削除します.
データを渡すためにPropsを使用します.
もしそうであれば、Try素子はv,iが何であるかを知らない.
Try構成部品では使用できません.
{this.fruits.map( (v, i) => {
return (
<Try />
);
})}
練習をしましょう.
大きいのから分離の練習を作りますほほほ
サブエレメント
Reactのコメント
{/* <input maxLength={4} value={this.state.value} onChange={this.onChangeInput} /> */}
Reactの配列を追加
ReactがRenderを行う基準は、以前の状態とは異なる必要があります.
pushだけなら、前のstateと今のstateは変わっていないと考えられます.
だから反応するときは前の関数だけを押すわけにはいかない...arr 1に入れる
そしてお金を追加します.
ex)
this.setState({
result: '홈런!',
tries: [...this.state.tries, { try: this.state.value, result: '홈런!' }],
}); //...this.state.tries : 옛날것, { try: this.state.value, result: '홈런!' } : 추가할것
非構造配分
const { result, value, tries, answer } = this.state;
これを使用します.stateは一つも使わず、上のようにできます.React Developer Tools
Chromeからダウンロードして使用
render()
state,propsが変更されるとreactがロードされます.
stateを変更せず、setStateのみを変更します.以下に示します.
renderが呼び出されます.
this.setState({});
shouldComponentUpdate
に対する境界温度ノードが作成できません.
shouldComponentUpdate(nextProps, nextState, nextContext) {
if (this.state.counter !== nextState.counter) { //이전의 counter와 나중의 counter가 변경이될경우
return true; // render 한다
}
return false; // render 안한다
}
PureComponent
卓越したパフォーマンス向上!!![PureComponent, memo]
자식 컴포넌트에는 왠만해서는 넣어주는게 좋다. render가 될때 계속 리로딩되니 불필요한 Render가 되기때문
自動実装shouldComponentUpdate(PureComponent shouldComponentUpdateをXXに設定)PureComponentでは、単純な文字列、number、booleanをチェックできます.
object、arrayなどの状況は確定しにくい.
また、array、objectの場合、通常は直接プッシュしてレンダリングできません.
以前の値...(展開演算子)を挿入し、次の値を挿入するだけです.
を選択して設定できます.
**また、このように複雑な内容をstateに入れないでください.
state = {
counter: 0,
string: "hello",
number: 1,
boolean: true,
object: {},
array: [],
};
onClick = () => {
<!-- const array = this.state.array;
array.push(1);
this.setState({
array: array,
}); -->
this.setState({
array: [...this.state.array, 1]
})
};
HooksからPureComponent、ShouldComponentUpdateを更新
Hooksでは次のように使用されます.
import React, { memo } from 'react';
// 구조분해 사용해서 props를 tryInfo로 바로 전환한후 사용
// Hooks를 사용할때에는 PureComponent도 없고, shouldComponentUpdate도 없기때문에 memo라는것을 사용 Props, state가 바꼈을때만 render
const Try = memo(({ tryInfo }) => {
return (
<li>
<div>{tryInfo.try}</div>
<div>{tryInfo.result}</div>
</li>
);
});
export default Try;
createRef()
import React, { Component, createRef } from 'react';
inputRef = createRef();
<input ref={this.inputRef} maxLength={4} value={value} onChange={this.onChangeInput} />
Context
A -> B -> C -> D -> E -> F -> G
このように出現した場合、中間過程を経ずにA->Gアイテムやデータを直接あげたい場合
Contextを使用すると、Reduxはこれらの異種を使用することもできます.
props -> context -> redux
Quiz
import React, {Component} from 'react';
class ResponseCheck extends Component {
state = {
state: 'waiting',
message: '클릭해서 시작하세요.',
result: [],
};
timeout;
startTime;
onClickScreen = () => {
const { state, message, result } = this.state;
if(state === 'waiting'){
this.setState({
state: 'ready',
message: '초록색이 되면 클릭하세요',
});
this.timeout = setTimeout(() => {
this.setState({
state: 'now',
message: '지금 클릭'
})
this.startTime = new Date();
}, Math.floor(Math.random() * 1000) + 2000); // 2~3초후에 settimeouts
} else if ( state === 'ready'){
clearTimeout(this.timeout);
this.setState({
state: 'waiting',
message: '너무 성급하시군요! 초록색이 된후에 클릭하세요!'
})
} else if ( state === 'now'){
this.endTime = new Date();
this.setState( (prevState) => {
return{
state: 'waiting',
message: '클릭해서 시작하세요!',
result : [...prevState.result, this.endTime - this.startTime]
}
})
}
}
onReset = () => {
this.setState({
result: []
})
}
renderAverage = () => {
const { result } = this.state;
//삼항 연사자를 이용해서 if를 사용하기
return(
result.length === 0 ? null
: <>
<div>평균 시간 : {result.reduce((a, c) => a + c) / result.length}ms</div>
<button onClick={this.onReset}>리셋</button>
</>
)
};
render(){
return(
<>
<div id="screen" className={this.state.state} onClick={this.onClickScreen}>
{this.state.message}
</div>
{this.renderAverage()}
</>
)
}
}
export default ResponseCheck;
Reference
この問題について(改訂ベース3)), 我々は、より多くの情報をここで見つけました https://velog.io/@vmelove/React-기초-정리-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol