Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Wordpress API+;反应段塞_Reactjs_Wordpress_Axios - Fatal编程技术网

Reactjs Wordpress API+;反应段塞

Reactjs Wordpress API+;反应段塞,reactjs,wordpress,axios,Reactjs,Wordpress,Axios,首先,我找到了不同的答案,但没有一个是有效的 我使用WP作为无头。我可以正确显示帖子列表和帖子结果。但是如果我将slug传递给url而不是ID,我不能显示一篇文章的内容 域/帖子/10>作品 域/帖子/我的slug>不工作 下面是代码(我正在删除不必要的代码): 主容器包装器: import React, { Component } from "react"; import { BrowserRouter as Router, Switch, Rout

首先,我找到了不同的答案,但没有一个是有效的

我使用WP作为无头。我可以正确显示帖子列表和帖子结果。但是如果我将slug传递给url而不是ID,我不能显示一篇文章的内容

域/帖子/10>作品 域/帖子/我的slug>不工作

下面是代码(我正在删除不必要的代码):

主容器包装器:

import React, { Component } from "react";
import {
    BrowserRouter as Router,
    Switch,
    Route
} from "react-router-dom";

import Blog from './Blog';
import SinglePost from "../components/Blog/SinglePost";


class MainContainer extends Component {
    render() {
        return (
            <Router>
                <Header/>
                <main>
                    <Switch>

                        <Route exact path="/blog" component={Blog}>
                        </Route>
                        <Route exact path="/posts/:slug" component={SinglePost}>
                        </Route>
                        <Route path="/about">
                            <About />
                        </Route>
                        <Route path="/">
                            <Home />
                        </Route>
                    </Switch>
                </main>
            </Router>
        )
    }
}

export default MainContainer;
import React, { Component } from 'react';
import axiosConfig from "../../axiosConfig";
import { Link, withRouter } from 'react-router-dom';
import renderHTML from 'react-render-html';
import Moment from 'react-moment';
import styled from "styled-components";


const Card = styled.article `
    display:flex;
    flex-wrap: wrap;
    align-items: center;
    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.23), 0 3px 12px rgba(0, 0, 0, 0.16);
    // background:${color.lightGrey};
    margin-bottom: 2em;
`;


const MAX_LENGTH = 140;
class Posts extends Component {
    constructor( props ) {
        super( props );
        this.state = {
            loading: false,
            posts: [],
            error:''
        }
    }
    componentDidMount() {
        this.setState({loading:true}, () => {
            axiosConfig.get(`/posts`)
                .then( res => {
                    this.setState({loading: false, posts: res.data})
                })
                .catch( error => this.setState({loading:false, error: error.response.data}))
        });
    }

    render() {
        const { posts } = this.state;
        return(
            <div className="container">
                { posts.length ? (
                    <div>
                        { posts.map( post => (
                            <Card key={post.slug}>
                                <Image>
                                    <img src={post.images.medium} alt=""/>
                                </Image>
                                <Text>
                                    <TextInner>
                                        {/*Title*/}
                                            <h2>
                                                <Link to={`/posts/${post.slug}`}> { post.title.rendered } </Link>
                                               
                                            </h2>

                                        {/*Data*/}
                                        <Moment locale={"pt"} format="LL">{post.date}</Moment>
                                        {/*body*/}
                                        {renderHTML(post.excerpt.rendered.substring(0, MAX_LENGTH))}
                                        <Link className="btn" to={`/posts/${post.slug}`}>
                                            Ver mais
                                        </Link>
                                    </TextInner>
                                </Text>
                            </Card>
                        ))}
                    </div>
                ) : '' }
            </div>
        );
    }
}

export default withRouter(Posts);
import React,{Component}来自“React”;
进口{
BrowserRouter作为路由器,
转换
路线
}从“反应路由器dom”;
从“./Blog”导入日志;
从“./components/Blog/SinglePost”导入SinglePost;
类MainContainer扩展组件{
render(){
返回(
)
}
}
导出默认主容器;
帖子列表:

import React, { Component } from "react";
import {
    BrowserRouter as Router,
    Switch,
    Route
} from "react-router-dom";

import Blog from './Blog';
import SinglePost from "../components/Blog/SinglePost";


class MainContainer extends Component {
    render() {
        return (
            <Router>
                <Header/>
                <main>
                    <Switch>

                        <Route exact path="/blog" component={Blog}>
                        </Route>
                        <Route exact path="/posts/:slug" component={SinglePost}>
                        </Route>
                        <Route path="/about">
                            <About />
                        </Route>
                        <Route path="/">
                            <Home />
                        </Route>
                    </Switch>
                </main>
            </Router>
        )
    }
}

export default MainContainer;
import React, { Component } from 'react';
import axiosConfig from "../../axiosConfig";
import { Link, withRouter } from 'react-router-dom';
import renderHTML from 'react-render-html';
import Moment from 'react-moment';
import styled from "styled-components";


const Card = styled.article `
    display:flex;
    flex-wrap: wrap;
    align-items: center;
    box-shadow: 0 3px 12px rgba(0, 0, 0, 0.23), 0 3px 12px rgba(0, 0, 0, 0.16);
    // background:${color.lightGrey};
    margin-bottom: 2em;
`;


const MAX_LENGTH = 140;
class Posts extends Component {
    constructor( props ) {
        super( props );
        this.state = {
            loading: false,
            posts: [],
            error:''
        }
    }
    componentDidMount() {
        this.setState({loading:true}, () => {
            axiosConfig.get(`/posts`)
                .then( res => {
                    this.setState({loading: false, posts: res.data})
                })
                .catch( error => this.setState({loading:false, error: error.response.data}))
        });
    }

    render() {
        const { posts } = this.state;
        return(
            <div className="container">
                { posts.length ? (
                    <div>
                        { posts.map( post => (
                            <Card key={post.slug}>
                                <Image>
                                    <img src={post.images.medium} alt=""/>
                                </Image>
                                <Text>
                                    <TextInner>
                                        {/*Title*/}
                                            <h2>
                                                <Link to={`/posts/${post.slug}`}> { post.title.rendered } </Link>
                                               
                                            </h2>

                                        {/*Data*/}
                                        <Moment locale={"pt"} format="LL">{post.date}</Moment>
                                        {/*body*/}
                                        {renderHTML(post.excerpt.rendered.substring(0, MAX_LENGTH))}
                                        <Link className="btn" to={`/posts/${post.slug}`}>
                                            Ver mais
                                        </Link>
                                    </TextInner>
                                </Text>
                            </Card>
                        ))}
                    </div>
                ) : '' }
            </div>
        );
    }
}

export default withRouter(Posts);
import React,{Component}来自'React';
从“../../axiosConfig”导入axiosConfig;
从“react router dom”导入{Link,withRouter};
从“react render html”导入renderHTML;
从“反应力矩”导入力矩;
从“样式化组件”导入样式化;
const Card=styled.article`
显示器:flex;
柔性包装:包装;
对齐项目:居中;
盒影:0 3px 12px rgba(0,0,0,0.23),0 3px 12px rgba(0,0,0,0.16);
//背景:${color.lightGrey};
边缘底部:2米;
`;
const MAX_LENGTH=140;
类Posts扩展组件{
建造师(道具){
超级(道具);
此.state={
加载:false,
员额:[],
错误:“”
}
}
componentDidMount(){
this.setState({loading:true},()=>{
axioconfig.get(`/posts`)
。然后(res=>{
this.setState({loading:false,posts:res.data})
})
.catch(error=>this.setState({loading:false,error:error.response.data}))
});
}
render(){
const{posts}=this.state;
返回(
{posts.length(
{posts.map(post=>(
{/*标题*/}
{post.title.rendered}
{/*数据*/}
{发布日期}
{/*正文*/}
{renderHTML(post.extracpt.rendered.substring(0,最大长度))}
弗梅斯
))}
) : '' }
);
}
}
使用路由器导出默认值(POST);
单篇文章

import React, { Component } from 'react';
import axiosConfig from "../../axiosConfig";
import { withRouter } from 'react-router-dom';
import renderHTML from 'react-render-html';
import Moment from 'react-moment';
import styled from "styled-components";

const MainArticle = styled.article `
    display:flex;
    flex-wrap: wrap;
    align-items: center;
    // background:${color.lightGrey};
    margin-bottom: 2em;
`;

class SinglePost extends Component {
    constructor( props ) {
        super( props );
        this.state = {
            loading: false,
            post: {},
            error:''
        }
    }
    componentDidMount() {
        this.setState({loading:true}, () => { /* Changing this line for .params.slug do not work */
            axiosConfig.get(`/posts/${this.props.match.params.id}`)
                .then( res => {
                    this.setState({loading: false, post: res.data})
                })
                .catch( error => this.setState({loading:false, error: error.response.data}))
        });
    }

    render() {
        const { post } = this.state;
        return(
            <>
                { Object.keys( post ).length ? (
                    <div>
                            <MainArticle key={ post.slug }>
                                <TopImage>
                                    <img src={post.images.large} alt=""/>
                                    <h1>{ post.title.rendered }</h1>
                                </TopImage>
                                <Text>
                                    <TextInner>

                                        <h2>{ post.slug }</h2>
                                        {renderHTML(post.content.rendered)}

                                        {/*Date*/}
                                        <Moment locale={"pt"} format="LL">{post.date}</Moment>
                                        
                                    </TextInner>
                                </Text>
                            </MainArticle>
                    </div>
                ) : '' }
            </>
        );
    }
}

export default withRouter(SinglePost);
import React,{Component}来自'React';
从“../../axiosConfig”导入axiosConfig;
从“react router dom”导入{withRouter};
从“react render html”导入renderHTML;
从“反应力矩”导入力矩;
从“样式化组件”导入样式化;
const main article=styled.article`
显示器:flex;
柔性包装:包装;
对齐项目:居中;
//背景:${color.lightGrey};
边缘底部:2米;
`;
类SinglePost扩展组件{
建造师(道具){
超级(道具);
此.state={
加载:false,
职位:{},
错误:“”
}
}
componentDidMount(){
this.setState({loading:true},()=>{/*更改.params.slug的此行无效*/
axioconfig.get(`/posts/${this.props.match.params.id}`)
。然后(res=>{
this.setState({loading:false,post:res.data})
})
.catch(error=>this.setState({loading:false,error:error.response.data}))
});
}
render(){
const{post}=this.state;
返回(
{Object.keys(post.length)(
{post.title.rendered}
{post.slug}
{renderHTML(post.content.rendered)}
{/*日期*/}
{发布日期}
) : '' }
);
}
}
使用路由器导出默认值(SinglePost);

应该是domain/posts/?slug=my slug

然后,您应该能够在以下情况下运行:

axiosConfig.get('domain/posts/', { params: {slug: 'my-slug' } }); 

谢谢你,但不幸的是,这对我不起作用。get('domain/posts/',{params:{slug:'my slug'}});