Недавно я изучаю реакцию, и мне интересно, смогу ли я использовать реакцию для выполнения проекта. Обычно я просматриваю наггеты, так что давайте попрактикуемся с наггетсами!
Можно ли подделать? 😂😂😂инициализация
- Инициализировать структуру проекта с помощью приложения create-реагировать
yarn create react-app react-juejin
Этот скаффолдинг автоматически поможет нам построить базовый проект и установить различные необходимые зависимости проекта React.Если во время процесса возникнет проблема с сетью, попробуйте настроить прокси или использовать другой реестр npm.
войти в проект и начать
cd react-juejin
yarn start
- Установить Ant-Design
yarn add antd
- Настройка стилей загрузки библиотек пользовательского интерфейса
Весь проект нуждается в перенастройке, что и используется здесьreact-app-rewired (Решение сообщества для индивидуальной настройки приложения create-реагировать).
yarn add react-app-rewired customize-cra
Измените файл package.json следующим образом.
Создайте config-overrides.js в корневом каталоге, чтобы переопределить конфигурацию по умолчанию.module.exports = function override(config, env) {
// do stuff with the webpack config...
return config;
};
- Используйте babel-плагин-импорт Этот плагин используется для загрузки плагинов и стилей по запросу.
yarn add babel-plugin-import
Измените файл config-overrides.js, созданный на предыдущем шаге.
const { override, fixBabelImports } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: 'css',
})
);
- добавить меньше загрузчика
Люди привыкли использовать меньше, и его можно установить в соответствии с личными предпочтениями.Однако, ссылаясь на приведенное выше решение сообщества react-app-rewired, нет такого решения для перезаписи, как sass, поэтому, если вам нужно использовать sass, вы можете используйте другие решения, чтобы ввести его.
yarn add less less-loader
Изменить config-overrides.js
//const { override, fixBabelImports } = require('customize-cra');
const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
}),
);
Для получения подробной информации о настройке см.официальный сайт муравьиного дизайна
Ввести избыточность
- Установить
yarn add redux react-redux --save
- Как использовать
Учитывая, что в будущем может быть несколько редьюсеров, мы должны хорошо продумать структуру в начале и упростить комбинирование и использование нескольких редюсеров в будущем.
(1) Создать редуктор
// 建议使用这中结构
// 1.定义默认数据
let initialState = {
notificationCount: 0
}
// 2.Reducer
const pageHeaderReducer = (state = initialState, action) => {
switch (action.type) {
case 'CHANGE_COUNT':
return { ...state, notificationCount: action.notificationCount }
default:
return state
}
}
// 3.导出
export default pageHeaderReducer;
(2) Создайте index.js как файл, объединяющий все редукторы.
import {combineReducers} from 'redux';
import pageHeaderReducer from './pageHeader.js';
const appReducer = combineReducers({
pageHeaderReducer
});
export default appReducer;
(3) Используйте определенный редуктор в App.js
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import appReducer from './reducers/index.js';
// 使用合并后的那个Reducer
const store = createStore(appReducer);
class App extends Component {
constructor(props){
super(props);
}
...
render() {
return (
<Provider store={store}>
<div className="App">
...
</div>
</Provider>
);
}
}
(4) Используйте избыточность в header/index.js
import { connect } from 'react-redux';
class Header extends Component {
...
render() {
...
return (
<Affix offsetTop={this.state.top}>
...
<Badge count={this.props.count} overflowCount={10}>
<a href="/">
<Icon type="notification" />
</a>
</Badge>
</Affix>
);
}
}
const mapStateToProps = (state) => {
return {
count: state.pageHeaderReducer.notificationCount
}
}
Header=connect(mapStateToProps)(Header)
export default Header;
До сих пор значение notificationCount можно было изменить извне, а через редукцию соответствующее значение count можно было получить нормально внутри компонента.
Более подробная конфигурация редукса может относиться кредукционная китайская документация
добавить маршрут
В навигации по главной странице есть 5 переключателей вкладок, соответствующих различному содержимому страницы. Далее мы расскажем, как переключаться между разным содержимым страницы с помощью react-router.
- Установить реактивный маршрутизатор
yarn add react-router-dom --save
- Как использовать
import { Switch, Route } from 'react-router-dom';
...
class Main extends Component {
constructor(props) {
super(props);
this.state = { }
}
render() {
return (
<div>
<Switch>
<Route exact path='/' component={Home}/>
<Route path='/timeline' component={Home}/>
<Route path='/dynamic' component={Dynamic}/>
<Route path='/topic' component={Topic}/>
<Route path='/brochure' component={Brochure}/>
<Route path='/activity' component={Activity}/>
</Switch>
</div>
);
}
}
Приведенное выше точное означает абсолютное совпадение /, если точное не указано, / также будет соответствовать / временной шкале и т. д. Приведенный выше код обеспечивает эффект, аналогичный переключению панели вкладок.
- навигация по вкладкам
render() {
return (
<ul>
{this.state.navs.map((item,index)=>{
return <li key={item.path} className={item.isActived?'activeLi':''} onClick={this.handelClick.bind(this,index)}>
<Link to={item.path}>{item.text}</Link>
</li>
})}
</ul>
);
}
React-router предоставляет два метода Link и NavLik. Если вам нужно только сопоставить маршрут, вы можете использовать Link. Отличие NavLink в том, что вы можете добавлять стили к текущему выбранному маршруту, такие как activeStyle и activeClassName, написанные выше.
Более подробная конфигурация реактивного маршрутизатора может относиться кReact-router Китайская документация
На данный момент базовая структура завершена, а затем на каждую страницу необходимо добавить фактический контент.
Текущие визуализации показаны выше и будут постоянно обновляться. Подробности смотрите в приведенном выше коде.github, Добро пожаловать в лайк, ваш лайк - моя мотивация.