01/10/2018, 08:24

Hàm gọi hàm trong react native

class PinkScreen extends Component{

constructor(props){
    super(props);
    this.state={
      number:12  
    }
}

changeState(){
    this.setState({
        number: this.state.number +1
    });
}
render(){
    this.changeState.bind(this);
    return(
        <View}>
                <Text>{this.state.number}</Text>
        </View>
    );
}
}

Mấy anh chị cho em hỏi làm sao mình có thể chạy hàm changeState mà không cần bỏ vào sự kiện onPress hay onClick ạ
em cám ơn.

Long Lch viết 10:37 ngày 01/10/2018

à em có thêm this.changeState=this.changeState.bind(this); vào hàm khởi tạo như link trên nhưng kết quả cũng ko khác hơn.

stackoverflow.com
Dedpul

How to call a function in the render function?

react-native
asked by Dedpul on 01:36PM - 08 Jul 16

明玉 viết 10:40 ngày 01/10/2018

Vậy bạn muốn changeState chạy ở sự kiện nào ???
Hay là như thế này:

class PinkScreen extends Component
{
    constructor(props)
    {
        super(props);
        this.state = {
          number: 12,
        };
    }
    componentDidMount()
    {
       setInterval(() => {
          this.changeState();
       }, 1000);
    }
    changeState()
    {
        this.setState({
             number: this.state.number +1
        });
    }
    render()
    {
        return(
            <View}>
               <Text>{this.state.number}</Text>
            </View>
        );
    }
}
Sáng Béo viết 10:39 ngày 01/10/2018

không được chạy setState trong render, lặp vô hạn đấy.

Long Lch viết 10:33 ngày 01/10/2018

Cám ơn anh đã rep, ý của em là ví dụ như mình muốn run changeState() trong hàm componentWillMount thì là sao ạ. vd như:
componentWillMount()
{
this.changeState.bind(i);

}

em ghi như thế này nhưng biến number ko đổi, anh có thể giải thích giúp em được ko ạ.

明玉 viết 10:24 ngày 01/10/2018

this.changeState.bind(i); không phải lệnh gọi hàm (chẳng biết bạn bỏ i vào đó làm gì ?? )

Nếu bạn muốn nó chạy trong componentWillMount thì cứ thế này là được:

constructor(props)
{
    super(props);
    this.changeState = this.changeState.bind(this); // tạo ra 1 wrap function cho changeState với context this (trỏ tới instance hiện tại của class PinkScreen) luôn luôn đảm bảo là đúng.
}
componentWillMount()
{
    this.changeState();
}

Tham khảo: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

Long Lch viết 10:33 ngày 01/10/2018

Ui, em cảm ơn anh nhiều nha. Hy vọng cộng đồng luôn có những người như anh

Bài liên quan
0