如何使用react和graphql开发一个blog

234人已阅读 2018-05-24 12:42:54
导读   GraphQL允许我们定义一个查询来提供一个通用的接口在客户端和服务端之间来请求和处理数据。
网站设计学院 php工程学院 机械模具学院 电商营销学院 平面设计学院

新闻详情

2018-05-24 12:42:54

如何使用react和graphql开发一个blog

  GraphQL允许我们定义一个查询来提供一个通用的接口在客户端和服务端之间来请求和处理数据。     

新闻简介:

  请确认在你的机器上安装了node.js和Npm。如果没有请到node官网下载安装安装,然后我们继续。
  首先创建app的文件夹。如果你也喜欢使用终端命令行,可以使用如下的命令:
  Mkdirsimple-react-blog
  Cdsimple-react-blog
  接下来,我们添加一个叫package.json的文件到当前文件夹,用来引用当前app需要的文件依赖:
  Vimpackage.json
  请添加如下内容,
  {{
  "scripts":{
  "dev":"nodeserver.js",
  "build":"nextbuild",
  "start":"nextbuild;NODE_ENV=productionnodeserver.js"
  },
  "dependencies":{
  "axios":"^0.16.2",
  "express":"^4.16.2",
  "lodash":"^4.17.4",
  "next":"^4.0.3",
  "next-routes":"^1.1.0",
  "react":"^16.0.0",
  "react-dom":"^16.0.0"
  }}
  多么完美的依赖。来看看,我们都用了那些插件:
  Axios是一个promised式的HTTP客户端,用来和graphql以及cosmic.js通信。
  Next.js是一个我们通用react框架。
  Nextroutes是一个动态路由。
  Express是一个服务端的框架。
  React用来处理用户界面。
  我们的脚本需要以上依赖运行和部署。运行以下命令安装上述的依赖:
  Npmi
  他等价于NPMINSTALL
  构建我们的博客
  下一步,我们来构建博客的页面,创建一个页面文件夹以及index.js文件。
  Vimindex.js
  添加如下代码到其中:
  importaxiosfrom'axios'import_from'lodash'importFooter
  from'./partials/footer'importHeaderfrom'./partials/header'import
  helpersfrom'../helpers'importconfigfrom'../config'export
  defaultclassextendsReact.Component{
  staticasyncgetInitialProps({req}){
  constquery=`{
  objects(bucket_slug:"${config.bucket.slug}"){
  _id
  type_slug
  slug
  title
  metadata
  created_at
  }
  }`
  returnawaitaxios.post(`https://graphql.cosmicjs.com/v1`,
  {query})
  .then(function(response){
  return{
  cosmic:{
  posts:_.filter(response.data.data.objects,
  {type_slug:'posts'}),
  global:_.keyBy(_.filter(response.data.data.objects,
  {type_slug:'globals'}),'slug')
  }
  }
  })
  .catch(function(error){
  console.log(error)
  })
  }
  render(){
  if(!this.props.cosmic)
  returnLoading...return(
  {
  this.props.cosmic.posts&&
  this.props.cosmic.posts.map(post=>{
  constfriendly_date=
  helpers.friendlyDate(newDate(post.created_at))
  post.friendly_date=
  friendly_date.month+''+friendly_date.date
  return(
  {
  post.metadata.hero.imgix_url&&
  }
  {post.title}by{post.metadata.author.title}on{post.friendly_date}Readmore...
  )
  })
  }
  )
  }}
  以下兴奋的事情发生了。
  1.我们导入了需要的模块:Axios,Lodash以及其他helpers和组件。
  2.我们使用了partials推入,并如header头部和footer尾部版权部分。关于partials可以参考GitHub。
  3.我们请求Comic.js以及grapthql,需要返回如下内容:
  ID,typeslug,slug,title,metadata以及create at
  4.我们设置主进程在我们的组件渲染到comic对象。我们使用lodash去解析posts和全局对象类型。
  5.我们返回表单数组数据和图片URL到主博客feed流。
  简单的表单查询
  针对简单的查询,我们添加POST属性到props。Post是用来从博客文章的slug中查询匹配的内容。代码如下:
  constgql_query=`{
  objects(bucket_slug:"${config.bucket.slug}"){
  type_slug
  slug
  title
  content
  metadata
  created_at
  }
  }`returnawaitaxios.post(`https://graphql.cosmicjs.com/v1`,
  {query:gql_query}).then(function(response){
  return{
  cosmic:{
  posts:_.filter(response.data.data.objects,
  {type_slug:'posts'}),
  global:_.keyBy(_.filter(response.data.data.objects,
  {type_slug:'globals'}),'slug'),
  post:_.find(response.data.data.objects,
  {slug:query.slug}),
  }
  }}).catch(function(error){
  console.log(error)})}
  完整的代码请你到github上查询下载。

    以上就是【上海昂立IT培训学校】小编努力整理出的内容,希望对大家的学习有所帮助哦。更多数据资讯信息请定期关注我们...

上一篇: 无 下一篇: 无

相关文章

推荐课程

查看全部课程
昂立IT教育

昂立IT教育

徐汇校区

查看全部校区 进入官方主页