yarn add react-router-dom


     npm install react-router-dom

 


을 아무리 해도, 사용하려하니 설치가 되지 않았다(해당 모듈을 찾을 수 없다)는 에러가 발생한다.


검색을 해봤더니,


package.json에 저장이 되어있는지 확인해보란다.


확인해봤다.


없다.


어떻게 없을수가 있지? 


yarn으로, npm으로 5번을  넘게 설치했다.


다음과 같이 설치하면 된다.



  

    npm install --save react-router-dom




--save?


저장하라는 건가보다.


사용된다.



Posted by sungho88
,

어떤 문자열이 있다고 가장하자.


string txt = "Hello My Name is JANG.";



이 때, 특정 문자열(Hello, My, Name, is, JANG, Hell, Nam 등등 모든 문자열 가능)


이 포함되어 있는지 확인하고 싶다면,


indexOf()메소드를 사용하면 된다.


주의할 점은,


 if문에서,


if (txt.indexOf("Hello")) {


로 생각할 수 있지만, 아니다.


index의 반환값은 


Hello라는 문자열이 없을 때 -1을 반환한다고 한다.


하지만, if 조건문에서 


0, -0, null, false, NaN, undefined, ' '


을 제외한 모든 값들은 true이다. -1도 true로 인식되므로, 위 if문은 항상 true가 된다.


그래서, 


if (txt.indexOf("JANG") !== -1)  {


alert("Find txt : JANG");

}


이렇게 -1 이 아니라면, 조건을 해줘야 한다.


-1이 아니라는 것은 string txt에 문자열이 존재한다는 것이므로 true가 발생, 


-1이라는 것은 없다는 것이므로 false가 출력된다.



Posted by sungho88
,

리액트를 다루는 기술이라는 책을 보며 궁금한 점을 적어보았다.



[DOM 관련]

1. 자바스크립트 DOM은 어떤 의미일까? 너무 크고 머릿속에 안 들어옴.

2. 자바스크립트 DOM과 리액트의 가상(Virtual) DOM의 차이점은 무엇인가?


[var와 const 그리고 let의 스코프 차이]


var = 


[부모 컴포넌트 & 자식 컴포넌트]


부모 컴포넌트 : B라는 컴포넌트를 불러와서 사용하는 App.js 컴포넌트가 부모.

B 컴포넌트 : 불려쓰이는 컴포넌트를 자식 컴포넌트. App.js로부터 props값을 전달받아 사용함.


 [p.85]


ES6의 화살표 함수와 일반 function을 이용한 함수 선언 함수의 차이점.


- 완전히 대체하는 것은 아니다


[p.137]


... 전개 연산자(Spread operator)



...뒤에 위치한 배열값을 그대로 꺼내서 현재 배열에 복사하는 것.


[p.146]


컴포넌트 라이프 사이클 활용 예제


[p. 157]


함수형 컴포넌트와 클래스 컴포넌트의 속도 차이.


함수형이 더 빠르다고 블로그에 나왔는데 뭐가 더 빠른걸까?



[Todo 리스트 구현]


e.stopPropagation();


이벤트의 확산을 막아 멈춰준다.


즉, 이벤트가 해당 부모의 이벤트까지 전달되지 않도록 도와준다.


return (
<div className="todo-item" onClick={() => onToggle(id)}>
<div className="remove" onClick={(e) => {
e.stopPropagation();
onRemove(id)
}}>
&times;
</div>

<div className={`todo-text ${checked && 'checked'}`}>
<div>{text}</div>
</div>

{
checked && (<div className="check-mark"></div>)
}

</div>
);



e.stopPropagation(); 을 하지 않으면,


onRemove를 호출하려고 클릭을 하면, onRemove함수만 실행되는 것이 아니라,


해당DOM의 부모의 클릭이벤트에 연결되어있는 onToggle도 실행되어 


정상적인 동작을 할 수 없다.


따라서,


e.stopPropagation();을 통해 이벤트가 해당 부모의 이벤트까지 확산되어 전달되지 않도록 해야한다.






onClick={() => onToggle(id)} 으로 호출해야한다.


onClick={onToggle(id)} 으로 하면 절대 안 된다.



위에는 함수를 단순히 선언한 것이므로, 눌렀을 때 함수가 실행되지만,

아래는 함수를 호출한 것이므로, 해당 함수가 렌더링될때 호출된다.


호출되면 -> 데이터에 변화가 생길 것이고 변화가 생기면? ->  


-> 또 렌더링 -> 또 호출 -> 또 데이터 변화 -> 또 렌더링 -> 또 호출.


무한반복에 빠질 수 있다. 













Posted by sungho88
,