首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react office js textfield控制组件

react office js textfield控制组件
EN

Stack Overflow用户
提问于 2018-10-03 13:03:07
回答 1查看 186关注 0票数 0

我试着在里面使用officejs react组件,但是由于osme的原因,我不能让它工作,properly..effective,这是代码。它可以在codepen中工作,但当我将相同的代码放入excel addin项目中时,我无法在文本字段中获得值。codepen中的代码(它可以工作):

[https://codepen.io/manish_shukla01/pen/ReWWmM][1]

app文件中我的项目中的代码(不起作用,因为handlechange事件不会被触发,所以即使我输入任何东西,我的state.value1的值也保持为空):

代码语言:javascript
复制
import * as React from 'react';
import { Button, ButtonType } from 'office-ui-fabric-react';
import Header from './Header';

import { TextField } from 'office-ui-fabric-react/lib/TextField';

import * as OfficeHelpers from '@microsoft/office-js-helpers';

export default class App extends React.Component<any,any,any>{

constructor(props) {
    super(props);
    this.state = {

                value1: '',
                 value2:'',
                 message:'Helloooo'
                 };

    this.handleChange1 = this.handleChange1.bind(this);
    this.handleChange2 = this.handleChange2.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleChange1(event) {
    this.setState({value1: event.target.value});


  }
    handleChange2(event) {
    this.setState({value2: event.target.value});

  }



  handleSubmit = async () => {
    event.preventDefault();
    this.setState({message: 'i got clicked'});
    try {
        //event.preventDefault();

        await Excel.run(async context => {
            /**
             * Insert your Excel code here
             */
            const range = context.workbook.getSelectedRange();

        // Read the range address
        range.load('address');

        // Update the fill color
        range.format.fill.color = 'blue';

        range.values = [[this.state.value2]];



        await context.sync();
        console.log(`The range address was ${range.address}.`);
        });
    } catch(error) {
        OfficeHelpers.UI.notify(error);
        OfficeHelpers.Utilities.log(error);
    };
}

render() {

    return (
        <form className='ms-welcome'  onSubmit={this.handleSubmit}>
            <Header logo='assets/logo-filled.png' title='Excel Analytics' message={this.state.message} />

            <TextField label="field1" 
  value={this.state.value1} onChange={this.handleChange1} 
required
/>
<Button className='ms-welcome__action' buttonType={ButtonType.primary} 

    onClick={this.handleSubmit}>Run
    </Button>

        </form>
    );
}
}
EN

回答 1

Stack Overflow用户

发布于 2018-12-10 21:43:43

我在Office UI Fabric TextField的"onChange“事件中也遇到了同样的问题,并改为使用"onChanged”来解决它,正如他们所说的那样,它已被弃用。但这对我很管用。

首先,在TextField中添加onChanged处理程序,如下所示:

代码语言:javascript
复制
<TextField name="fieldName" label="field1" value={this.state.value1} onChanged={val => this.handleChange1("fieldName", val)} />

还要注意,添加"name“属性是为了标识handleChange1中的控件。

现在更改处理程序实现,如下所示:

代码语言:javascript
复制
handleChange1(name, value) {
    this.setState(prevState => ({
      result: {
          ...prevState.result,
          [name]: value
      }
    }));
  }

希望这能有所帮助。谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52619990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档