inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]

안녕하세요 개발자님

125

김건희

작성한 질문수 63

0

안녕하세요 질문이 있는데요!

제가 개발자님의 코드를 적용하여 다른걸 만들어봤는데 오류가 나서 질문드립니다.

import React, { useEffectuseState } from 'react';
import axios from "axios";
import { IconColCardRowCarousel } from 'antd';
import Meta from 'antd/lib/card/Meta';
import ImageSlider from '../../utils/ImageSlider';
import SearchFeature from './Sections/SearchFeature';


const LandingPage = () => {

    const [ProductssetProducts] = useState([]);
    const [SkipsetSkip] = useState(0);
    const [LimitsetLimit] = useState(8);
    const [SearchTermsetSearchTerm] = useState("");
    const [scoresetScore] = useState(0);
        

    const getProducts = (body=> {
        axios.post('/api/product/products'body)
            .then(response => {
                if (response.data.success) {
                    setProducts(response.data.productInfo)
                    
                } else {
                    alert(" 상품들을 가져오는데 실패 했습니다.")
                }
            })
    }

    const renderCards =  Products.map((productindex=> {
        console.log('*** : 'product)
        const title  = product.title ?? '';
        
        const splitTitle = title.split(',');
        
        var _score = 0;

        const temp = splitTitle.map((stri=> {
            const _str = str;    
         
            if(_str === '철' || _str === '금' || _str === '불'){
                _score += 1;
            }
        });

        console.log('_score : ',_score)
     
       setScore(_score) <<< 이부분

        return <>
            <Col lg={6} md={8} xs={24} key={index }>
                <Card
                    cover={<a href={`/product/${product._id}`} ><ImageSlider images={product.images} /></a>}
                >
                    <Meta
                        title={product.description}
                        // description={`$${product.description}`}
                    />
                </Card>
            </Col>
        </>
    })
    

    const updateSearchTerm = (finalSearch=> {
         console.log("finalSearch",finalSearch);
        let body = {
            skip: 0,
            limit: Limit,
            searchTerm: finalSearch
           
        }
        setSkip(0)
        setSearchTerm(finalSearch)
        getProducts(body)
    }

   
    return (

        <div style={width: '75%'margin: '3rem auto' }}>
            <div style={textAlign: 'center' }}>
                <h2>Let's Travel Anywhere <Icon type="rocket" /> </h2>
            </div>


            <div style={display: 'flex'justifyContent: 'flex-end'margin: '1rem auto' }}>
                {/* <SearchFeature
                    refreshFunction={ updateSearchTerm}
                />
            </div> */}

            <SearchFeature
                   updateSearchTerm={filters => updateSearchTerm(filters)}
                />
            </div>
    

            <Row gutter={[1616]} >
                {renderCards}
            </Row>

            <br />

           
        </div>
    )
}

export default LandingPage

import React, { useEffectuseState } from "react";
import { Input } from "antd";

const { Search } = Input;

function SearchFeature(props) {
  const [searchTermsetSearchTerm] = useState({
    s1: "",
    s2: "",
    s3: "",
  });
  console.log("searchTerm :::"searchTerm);
  const searchHandler = (keydata=> {
    setSearchTerm({
      ...searchTerm,
      [key]: data,
    });
  };

  const onSubmitHandler = (event=> {
    event.preventDefault();
    const postData = searchTerm;
    //if(예외처리)
    props.updateSearchTerm(postData);
  };

  return (
    <div>
      <form onSubmit={onSubmitHandler}>
        <div>
          <Search
            placeholder="ingredients1"
            onChange={(e=> searchHandler("s1"e.target.value)}
            style={width: 200 }}
            value={searchTerm.s1}
          />
        </div>
        <div>
          <Search
            placeholder="ingredients2"
            onChange={(e=> searchHandler("s2"e.target.value)}
            style={width: 200 }}
            value={searchTerm.s2}
          />
        </div>
        <div>
          <Search
            placeholder="ingredients3"
            onChange={(e=> searchHandler("s3"e.target.value)}
            style={width: 200 }}
            value={searchTerm.s3}
          />
        </div>
        <button>변신!</button>
      </form>
    </div>
  );
}

export default SearchFeature;



제가 이것을 응용해봤는데요 제가 하려는 것은  제가 입력한 세개의 값이 만약 철 금 불 이라고 가정했을 시 디비에 철 금 불 이라는 글자가 있을때 제가 입력한 글과 디비에 있는 글이 맞은 수 대로 score에 setScore를 통해서 저장해주려고 하거든요.. 값은 잘 들어오고 console에도 값이 맞은 글자 수 대로 잘 들어옵니다 이것 말고는 다른페이지의 코드도 거의 같습니다. 그런데 setScore(_score)를 하여 state값에 스코어를 저장하려하면 이상하게  콘솔에 수많은 score값이 찍히며 Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.

이러한 에러가 뜹니다... 이것을 해결하려면 어떻게 해야할까요...

mongodb react 웹앱 nodejs redux

답변 0

강의 내용은 훌륭하나, 환경 설정 오류 때문에 진도를 나갈 수 없습니다. 20년 버전 강의.

0

60

1

강의자료는 어디서 볼 수있나요??

0

66

1

이 쇼핑몰 만들기 강의는 관리자페이지 만드는건 없나요

0

113

2

웹에서 실시간 코드반영이 안돼요

0

120

1

app.use질문

0

64

1

강사님께 어떻게 직접질문할수있어요??

0

75

1

const함수같은거 기초강의는 어디있나요

0

81

2

리덕스 참조챕터가 어딨어요? 미리듣고오라는데요

0

81

2

강의가완전 오래되서 다 틀리네 app.jsx도 tailwind css 다틀림 무책임함

0

68

1

개발자도구에 redux란이 없어요

0

88

1

npx tailwindcss init -p 에서 계속 에러나요

0

92

1

쇼핑몰기능중 찜하기 기능은 어떻게 구현하나요

0

138

2

강의하다 줌으로 설명가능한지좀 정확히 알려주세요. 이 선생님 정책이 어떻게 되는데요. 직접 연락할 메일이라도 알려주세요

0

43

1

도표 강의 자료 열람 불가능

0

109

1

tailwindcss를 vite에서 이용하는 방식이 바뀐것 같습니다.

0

1132

2

eslint 설정 후 오류가 납니다.

0

222

1

오버로드 오류

0

150

1

VSCode에서 save를 할 때, landingpage의 useEffect가 실행되는 문제에 대하여

0

169

1

dispatch(logoutUser()) 실행시 dispatch(authuser())도 함께 실행되는 문제

0

228

2

logout할 때, server로 요청을 보내서 authUser middleware를 통과하도록 하는 이유?

0

195

1

webkit-text-size-adjust 오류

0

314

1

does not provide an export named 'userReducer'

0

217

2

빌드 배포

0

140

1

삭제 예정 강의는 언제 삭제 되나요? 저것때문에 수강완료를 못하면 회사에서 비용을 청구한다고 합니다~

0

220

2