美文网首页React极简教程
react fetch 及 react 组件间数据的传输

react fetch 及 react 组件间数据的传输

作者: 走走婷婷1215 | 来源:发表于2017-03-01 11:48 被阅读2866次

    fetch 是 XMLHttpRequest 的最新替代技术,它的主要方法就是 fetch() 方法。

    相关资料:
    fetch网址:阮一峰;http://javascript.ruanyifeng.com/bom/ajax.html#toc27
    http://blog.csdn.net/u014410695/article/details/51017088

    url :http://blog.csdn.net/u014410695/article/details/51017088

    在项目中使用:

    home.js 是首页, 而 NavList 是轮播图的组件,现在要实现的就是在 home.js 中把首页的数据拿到并拆分出来,把轮播图这一块的数据传递给 NavList 组件, NavList 拿到数据并渲染。

    1、home.js 拆分数据
    一般数据拆分是写在 componentDidMount() 中,该方法是在 render() 方法成功调用并且真实的 dom 已经被渲染后进行。

    componentDidMount() {
       /* var myHeaders = new Header();
        myHeaders.append("Content-Type", "text/plain");
        myHeaders.append("Content-Length", context.length.toString());
        myHeaders.append("X-Custom-Header", "ProcessThisImmediately");
    
        var myInit = {
            method: 'POST',
            headers: myHeaders,
            mode: 'cors',
            cache: 'default'
        };  */   // 头部信息,解决兼容性问题
    
       var url = "................................."; // 接口url
       fetch(url).then(
            function (res) {
                if (res.ok) {
                    return res.json()
                } else {
                    {this.LogError(res)}
                }
            }
        ).then(function (json) {
            if (json.code == "200") {  // 判断请求是否正确
                return json.datas
            }
        }).then(function (datas) {
            for (var i=0; i<datas.length; i++) {
                if (datas[i].type == "adv_list") {  // 取出轮播图的数据
                    return datas[i].ietm_data
                }
            }
        }).then( (e) => {
           console.log("props111=====" + e );
            this.setState({  // setState 将数据塞在 state 中以便在组件间进行数据传递
                slideList:e
            });
    
        });
    }
      LogError(res) {
          console.error('服务器繁忙,请稍后重试; \r\nCode:' + res.status)
      }
    

    2、数据传递

    home.js 在 constructor 中初始化 slideList 数组,以便后续来承载需要传输给子组件的数据。

    constructor(){
        super();
        this.state = {
            slideList:[],  // 初始化 slideList[]
        }
    }
    

    前面在第一步也讲到了,把数据 setState 到 slideList 中。

    render() {
      return (
        <div>
            <Nav />
            <NavList  datas={this.state.slideList} />  // 在 render 数组的时候将数据传输进去
            <GridView />
        </div>
      );
    }
    

    3、子组件接收数据并渲染组件

    NavList 中 继承父组件的 props:

    constructor(props) {
        super(props);
        console.log("props=====" + props);  // 这里打印时已经确定数据传输过来了
        this.state = {   // 无关
            current: 1,
        };
    };
    

    渲染组件,我这里用的是 antd mobile 的轮播图:

    render() {
        const settings = {
            //是否显示面板指示器
            dots: true,
            //是否自动切换
            autoplay: true,
            //是否循环播放
            infinite: true,
            //手动设置当前显示的索引
            selectedIndex: this.state.current,
            beforeChange: this.beforeSlide,
            afterChange: this.slideTo,
        };
    
        return (
            <div>
                <Carousel {...settings}>
                    {
                        this.props.datas.map(function(el){  // map遍历 渲染
                            return <Flex
                                justify="center"
                                className={styles.flex}
                            >
                                <img className={styles.image} src={el.image} />
                            </Flex>
                        })
                    }
    
                </Carousel>
                <WhiteSpace size="1g" />
            </div>
        );
    }
    

    ok,动态取值的轮播图就已经完成了。

    相关文章

      网友评论

        本文标题:react fetch 及 react 组件间数据的传输

        本文链接:https://www.haomeiwen.com/subject/zpyqgttx.html