사용하고 있는 state중 전역state로 관리하면 편할 것을 리덕스로 이식하는 작업을 진행.
feeds의 경우 현재 firebase내에 저장된 정보를 받아서 로컬 state로 선언된 feeds 내에 저장해서 사용하는 방식을 사용하고 있는데 feeds도 리덕스로 돌려야 할지는 좀더 관찰이 필요함.
이전 프로젝트 들에서 데이터 전체가 담긴 배열을 받아서 이런 저런 필터링 조건에 맞춰 filter() 메서드 등으로 필터링 한뒤 화면에 출력하는 것은 이미 시도해 본 방식이기에, 이번엔 새로운 방식을 경험하는 차원에서 필터링 조건을 서버에 보내고 해당 조건에 맞는 데이터만 가져오는 방식을 사용해 보고자 함.
위와 같은 이유로 feeds는 redux를 사용하지 않고 그때그때 서버에서 가져오는 방식을 사용하고 있는데 다른 팀원들이 작업한 것들을 전부 merge했을때 치명적인 문제가 생기거나 구현이 어려운 부분이 있다면 그때 feeds도 redux로 돌릴 예정.
//configStore.js
import { createStore } from 'redux';
import { combineReducers } from 'redux';
import fetchConfig from 'redux/modules/fetchConfig';
const rootReducer = combineReducers({
fetchConfig
});
const store = createStore(rootReducer);
export default store;
//fetchConfig.js
const initialState = { field: 'CVS', compare: '!=', value: '임시' };
//action types
const GET_ALL = 'fetch/GET_ALL';
const GET_GS = 'fetch/GET_GS';
const GET_CU = 'fetch/GET_CU';
const GET_SEVEN = 'fetch/GET_SEVEN';
const GET_EMART = 'fetch/GET_EMART';
const GET_BY_USER = 'fetch/GET_BY_USER';
//action creators
export const getAll = () => {
return { type: GET_ALL };
};
export const getGS = () => {
return { type: GET_GS };
};
export const getCU = () => {
return { type: GET_CU };
};
export const getSeven = () => {
return { type: GET_SEVEN };
};
export const getEmart = () => {
return { type: GET_EMART };
};
export const getByUser = (uid) => {
return { type: GET_BY_USER, payload: uid };
};
// 리듀서
const fetchConfig = (state = initialState, action) => {
switch (action.type) {
case GET_ALL:
return { field: 'CVS', compare: '!=', value: '임시' };
case GET_GS:
return {
field: 'CVS',
compare: '==',
value: 'GS'
};
case GET_SEVEN:
return {
field: 'CVS',
compare: '==',
value: '세븐일레븐'
};
// (중략)
case GET_BY_USER:
const userId = action.payload;
return {
field: 'user',
compare: '==',
value: userId
};
default:
return state;
}
};
export default fetchConfig;
기존에 setChosenCVS state로 선택된 특정 편의점을 필터링 해서 조회할 수 있는 로직을 확장해서 fetch해오는 자료의 필터링 로직 전체를 제어할 수 있도록 함.
fetchConfig 객체를 redux로 관리하는데, 서버에서 feeds 자료를 불러오는 컴포넌트에서 리덕스의 useSelector 메서드를 이용해 fetchConfig객체에 접근하고 이후 fetchConfig객체 내에 정의된 요소들을 이용해 query의 필드, 비교연산자, 비교값 등을 설정할 수 있도록 함.
const q = query(collection(db, 'feeds'),
where(fetchConfig.field, fetchConfig.compare, fetchConfig.value));
출처) https://school.programmers.co.kr/learn/courses/30/lessons/12940
function solution(n, m) {
let G=1;
for (let i=2;i<=Math.min(n,m);i++)
if(n%i===0 && m%i===0){
G=i
}
return [G,n*m/G]