环境配置
新建项目create-react-app redux-meme-generator
安装插件npm i -S redux react-redux redux-thunk react-bootstrap
文件结构
运行项目npm run start
,清空src
下的文件,建立index.js
,引入react
和react-dom
。并在src
下新建component
、actions
、reducer
文件夹。
src/index.js
import React from 'react'; |
component/App.js
import React, {Component} from 'react'; |
通过以上代码就可以有权限从component
通过store
取得memes
,现在可以进行UI操作。
环境设置完毕。
Fetch Memes Asyncchronously
在串接API时需要登录账号密码,我们将这组账号密码封装成一个action
。
src/actions/secrets.js
const username = 'AnnieTsai'; |
但我们不想在项目公开时,被其他人看到我们的账号密码。因此可以到.gitignore
里将这个action
的路径写上src/actions/secrets.js
,就不会发布出去。
actions/index.js,编写从json
获取memes
的逻辑。
export const RECRIVE_MEMES = 'RESEIVE_MEMES'; |
我们可以通过fetch
来获得所需要的内容。
Fetch API提供了一个JavaScript接口,用于访问和操作HTTP管道的部分,例如请求和响应。它还提供了一个全局
fetch()
方法,该方法提供了一种简单、合乎逻辑的方式来跨网络异步获取资源。
套用thunk middileware
reducer/index.js
import {combineReducers} from 'redux'; |
Listing memes
我们可以借由meme name
来区分每一个component
,每一个meme
对象都有name
属性值,让它们能够被识别。另外,我们也需要加上key
来判别每个对象的唯一性。
<div> |
Load more
当一个页面有大量的资料时,我们就会进行分页或是浓缩的动作。
通过constructor
建立一个设定显示数量的state
。
src/component/App.js
constructor(){ |
JavaScript的slice()
让我们可以从某个字符串string.slice()
或数组Array.slice()
提取某一段信息。在渲染的地方加上:slice(0,this,state,memeLimit)
。
this.props.memes.slice(3, this.state.memeLimit).map((meme,index) => { |
接下来我要制作一个按钮,让使用者可以点击load more
,就可以显示更多memes
。当使用者点击这个按钮时,便更新state
,把memeLimit
再加上10。
<div onClick={() => { |
create meme items
现在把图片呈现出来
component/MemeItem.js
import React, {Component} from 'react'; |
在App.js
引入MemeItem.js
,并在原本渲染呈现meme name
的地方
转换成MemeItem
component tag
<MemeItem key={index} meme={meme} /> |
Animating Memes Items
要实现鼠标移动图片之上有动画,可以通过css
的hover
,我们可以通过setState
不断地更新hover
的状态。在MemeItem
component中设置constructor
constructor(){ |
雅致寓于高阁渔舟唱晚,古典悠然;
格调外发园林绿树萦绕,馥郁清香。
扫描二维码,分享此文章