2017-04-26 45 views
1

我正在使用React.js和React InlineEdit。我想编辑文本,并保存文本 这个新的价值是我的代码:反应:编辑后保存值

//{etape.title} is not empty 
<InlineEdit 
validate={this.customValidateText} 
activeClassName="editing" 
text={etape.title} 
paramName="message" 
change={this.dataChanged} 
/> 



dataChanged(text) {  
     this.setState({   
      editStep: text.target.value 
     }) 
    } 

customValidateText(text) { 
     return (text.length > 0 && text.length < 64); 
    } 

所以我可以编辑我的文字,但是当我在文本中单击,值BU默认回来,不是编辑的值。

我该怎么做? 谢谢

+0

你试试这个:'变化= {(文本)=> this.dataChanged(文字)}' –

+0

是,但我有同样的问题:( –

回答

0

可能是上下文错误。 尝试下列操作之一:

change = {(text) => this.dataChanged(text)} 

dataChanged = text => { 
     this.setState({ 
      editStep: text.target.value 
     }) 
    } 

试试这个,然后:

<InlineEdit 
validate={this.customValidateText} 
activeClassName="editing" 
text={this.state.message} 
paramName="message" 
change={this.dataChanged} 
/> 

在你的构造:

constructor(props) { 
    super(props); 
    this.state = { 
     //what you had in your state 
     message: //The initial value you had in etape.title 
} 

最后:

dataChanged = (data) => { 
     this.setState({...data}) 
    } 
+1

第一个应该是'change = {(text)=> this.dataChanged(text)}',一个正常的函数调用。 –

+0

谢谢你的回答,但我正在尝试你的解决方案,而且它不能工作,我有相同的结果... –

+0

正如@alix所说,可能有助于获得整个代码 –

0

,如果你不绑定dataChanged方法constructor方法,尝试;

<InlineEdit 
    validate={this.customValidateText.bind(this)} 
    activeClassName="editing" 
    text={etape.title} 
    paramName="message" 
    change={this.dataChanged.bind(this)} /> 

正如@Victor提到的,这可能是一个上下文问题。如果你显示你的整个组件代码更好。

+0

我'已经尝试了bind(),但它不起作用.. –

0

DOC

变函数会返回一个对象,将包含您在paramNames定义(在你的情况message)和键将包含由用户编辑的价值的关键。所以你需要这样写:

<InlineEdit 
    validate={this.customValidateText.bind(this)} 
    activeClassName="editing" 
    text={etape.title} 
    paramName="message" 
    change={(data) => this.dataChanged(data)} /> 

dataChanged(data) { 
    console.log(data) 
    this.setState({editStep: data.message}) 
} 

它应该工作。

检查所需道具的细节:https://www.npmjs.com/package/react-edit-inline#required-props

+0

不,我已经测试过,但是我也遇到同样的问题 –