Задать вопрос
  • Прокомментируете приложение на React/Redux?

    devellopah
    @devellopah
    1) ты можешь использовать spread operator из-под коробки

    вместо

    case 'SWITCH_EDIT_MODE':
          return Object.assign({}, state, {
            editMode: action.value
          })


    так

    case 'SWITCH_EDIT_MODE':
          return { ...state, editMode: action.value}


    2) weatherApiId спрятать в .env, а .env кинуть в .gitignore (dotenv-webpack to the rescue)

    3)MainContainer на мой взгляд
    import React from 'react';
    import { connect } from 'react-redux';
    import { bindActionCreators } from 'redux';
    import * as actionCreators from './../../actions/actionCreators';
    import Main from './../Main/Main';
    
    class MainContainer extends React.Component {
    
    	componentDidMount() {
        this.props.actions.detectLocation();
      }
    
      render() {
      	return <Main {...this.props.store}  {...this.props.actions} />
      }
    }
    
    const mapStateToProps = state => ({ store: state })
    const mapDispatchToProps = dispatch => ({ actions: bindActionCreators(actionCreators, dispatch) })
    
    export default connect(mapStateToProps, mapDispatchToProps)(MainContainer)


    и Main соответсвенно
    import React from 'react';
    import PropTypes from 'prop-types';
    
    import styles from './Main.css';
    
    import PageBackground from './../PageBackground/PageBackground';
    import WeatherIcon from './../WeatherIcon/WeatherIcon';
    import Temperature from './../Temperature/Temperature';
    import Location from './../Location/Location';
    import Loader from './../Loader/Loader';
    import Error from './../Error/Error';
    
    const propTypes = {
      pageBackground: PropTypes.string,
      location: PropTypes.object,
      editMode: PropTypes.bool,
      changeLocation: PropTypes.func,
      switchEditMode: PropTypes.func,
      weatherIcon: PropTypes.string,
      temperature: PropTypes.number,
      weatherDescription: PropTypes.string
    };
    
    export default function Main (props) {
      return (
        <div className={styles.container}>
          {props.loading && <Loader />}
          {props.loadingError && <Error>Sorry, an error occurred. Try to reload page</Error>}
          <PageBackground background={props.pageBackground} />
          <Location city={props.location.city}
            editMode={props.editMode}
            onLocationSelect={props.changeLocation}
            onChangeLocationClick={() => props.switchEditMode(true)}
            onInputBlur={() => props.switchEditMode(false)} />
          <div className={styles.split}>
           <WeatherIcon code={props.weatherIcon} class={styles.icon}/>
          	<span className={styles.date}>Today</span>
          </div>
          <Temperature value={props.temperature}/>
          <div className={styles.description}>props.weatherDescription}</div>
        </div>
      )
    }
    
    Main.propTypes = propTypes;


    4) в идеале все компоненты кромеMainContainer должны (в этом проекте) быть functional components.

    5) можно было бы написать больше редьюсеров(отдельный для получения location, для weather, для pagebackground) это позволило бы тебе "выдавить" логику из дочерних компонентов(PageBackground, Temperature, WeatherIcon) в MainContainer, чтобы представить в функуиональном виде

    6) нужно ограничить кол-во запросов за определённый промужуток времени(например, 15минут), ибо погода не меняется так часто (express-rate-limit).
    Ответ написан
    3 комментария
  • Как найти программистов, которые заинтересованы в практике разговорного английского?

    Prognosticator
    @Prognosticator
    TODO: Здесь будут ворованные умные мысли, типа мои
    Сергей, звони. Контакты в профиле.
    Ответ написан
    Комментировать
  • Стоит ли новичку изучать Kotlin. Scala?

    AlekseyPleshkov
    @AlekseyPleshkov
    Java/Swift developer, transhumanist, dreamer.
    Эти выражения отчасти верны. Java язык популярный и мощный, он еще долго будет востребован и нужен. Scala имеет свою экосистему и плохо завязана с Java (грубо говоря). Kotlin же не только полностью совместим с java, но и сам по себе очень продуманный язык. Писал на Kotlin несколько проектов и после него больно возвращаться на Java.

    Вывод: Советую смотреть именно в сторону Kotlin, учитывая не только качественную реализацию языка, но и полную совместимость с Java (А еще там Java автоматически конвертируется в Kotlin ;) ).
    Ответ написан
    1 комментарий