2017-05-19 33 views
0

我查看層次:的TextInput中的setValue使onChangeText 「最大調用堆棧大小超出」

A extends Component { 
    render(this.props.innerView()) 
} 

B extends Component { 
    render(
     <A innnerView={this._renderInnerView}/> 
    ) 
} 

而且我innerView包含一個TextInput。

在Android中,我的TextInput低於:

<TextInput 
       style={{flex: 1}} 
       autoCapitalize='none' 
       placeholder={strings.addLinkTitleHint} 
       keyboardType='default' 
       enablesReturnKeyAutomatically={true} 
       autoCorrect={false} 
       onChangeText={(text) => { 
        console.log("text : ", text); 
        if (this.state.modifyingTitle === text) { 
         return; 
        } 
        this.setState({ 
         modifyingTitle: text 
        }) 
       }} 
       underlineColorAndroid='rgba(0,0,0,0)' 
       value={this.state.modifyingTitle} 
      /> 

我能得到一個時間的日誌信息,並秒鐘後,我得到「最大的調用堆棧大小超出了」錯誤。

我發現A中的渲染方法被調用很多次,但我不知道如何解決它。

回答

0

它可能與你綁定狀態的值有關,而setState是異步的(事實上永遠不等於text。如果你的狀態是組件本地的,你不應該不得不擔心綁定輸入的值到狀態,因爲任何輸入變化都應該反映在狀態中(我想不出它可能會出現不同步的方式)。

+0

我需要設置值到這個TextInput根據this.state.modifyingtitle,所以我只需要寫「value = {this.state.modifyingTitle}」並更新這個狀態onChangeText –

+0

我的意思是我需要設置初始值TextInput –

+0

也許拉出初始'modifyTitle的值'在組件構造函數中,並將其放入一個非狀態變量,並將其綁定到'value',以便它在更改時不會觸發'changeText'事件。 –

相關問題