开发者社区> 问答> 正文

在 componentWillReceiveProps里 setState方法的回调函数不会触发

milo__ 2017-03-03 11:22:51 7682

测试环境
iPhone:10.2.1-iOS
weex_sdk: 0.9.5
qap-cli: 3.0.16
千牛版本: 测试版 5.8.2.1

在下面例子里 Children 组件的 componentWillReceiveProps 中执行了
this.setState({anyValue: true}, () => console.log('componentWillReceiveProps end'));
但是更新完状态 () => console.log('componentWillReceiveProps end')不会执行;

/** @jsx createElement */
import { Env, Transition, Button } from 'nuke';
import {createElement, Component,findDOMNode,render} from 'rax';
import { View, Text,Image} from 'nuke';
const { isWeex, isWeb } = Env;


class Childen extends Component {
    componentWillReceiveProps(nextProps) {
        console.log('componentWillReceiveProps begin');
        this.setState({anyValue: true}, () => console.log('componentWillReceiveProps end'));
    }

    render() {
        console.log('Childen', this.state);
        return <View>Childen</View>
    }
}

class App extends Component {
    constructor(props){
        super(props);
        this.state = {value: 1};
    }
    componentDidMount() {
        this.setState({value: 2}, () => console.log(this.state));
    }
    render() {
        return (
            <Childen value={this.state.value} />
        );
    }
}

render(<App/>);

前端开发 rax JavaScript 测试技术 iOS开发
分享到
取消 提交回答
全部回答(3)
  • yuanyan
    2019-07-17 20:51:55
    已采纳

    rax@0.2.2 版本解决了这个bug:

    screenshot

    http://github.com/alibaba/rax

    2 0
  • seajean
    2019-07-17 20:51:55
    this.setState({anyValue: true}, () => console.log('componentWillReceiveProps end'));

    我先测试下


    最新的内建1.0.9已经集成了,等发布新版本即可~~

    2 0
  • qap钻石客服
    2019-07-17 20:51:55

    测试了下:
    1.componentDidMount中setState回调会调用,componentWillReceiveProps中调用setState回调不会执行。
    screenshot

    2.componentWillReceiveProps中调用setState虽然回调不会执行,但是setState是成功的,原因:render函数会在setState之后执行。

    1 0
添加回答

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程