微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在没有组件安装的情况下如何在内部具有setState的函数内部调用函数?

如何解决在没有组件安装的情况下如何在内部具有setState的函数内部调用函数?

我正在尝试使用Can i have a function inside a state in react?中给出的答案在绑定函数中使用函数。我也尝试使用JSON.stringify'const data'。我可以打印按钮,但是我试图将单击的按钮存储为值。

const InitArr = ({ myArray,handleClick }) => ( <div> {myArray.map(item => (<button onClick={() => handleClick(item.key)}>{item.key}</button> ))}    </div>)
class App extends React.Component {
   constructor(props) {
     super(props);
     this.state = {myArray: [{"key": "7"},{"key": "8"},{"key": "9"},{"key": "4"},{"key": "5"},{"key": "6"},{"key": "1"},{"key": "2"},{"key": "3"},{"key": "0"}],value: '0',};
     this.setValues = this.setValues.bind(this)
     this.handleClick = this.handleClick.bind(this)
   }
   setValues(key) {
      const temp = key
   }
   handleClick(key) {
       const { value } = this.state
       const data = setValues(key)
       this.setState({ value: data })
    }
    render() {
    return (
       <div>
          <div>{this.state.value}</div>
              <InitArr myArray={this.state.myArray} handleClick={this.handleClick} />
       </div>
     );}}
     ReactDOM.render( <App />,document.getElementById("root"));

解决方法

您的代码存在问题,因为您调用的是setValues(key)而不是this.setValues(key),因此在当前范围内找不到setValues

进行更改以允许代码运行,尽管我还更改了setValue以返回某些内容,因此呈现的数字将不会消失:

setValues(key) {
    const temp = key;
    return key;
  }

const InitArr = ({ myArray,handleClick }) => (
  <div>
    {' '}
    {myArray.map((item) => (
      <button onClick={() => handleClick(item.key)}>{item.key}</button>
    ))}{' '}
  </div>
);
class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      myArray: [
        { key: '7' },{ key: '8' },{ key: '9' },{ key: '4' },{ key: '5' },{ key: '6' },{ key: '1' },{ key: '2' },{ key: '3' },{ key: '0' },],value: '0',};
    this.setValues = this.setValues.bind(this);
    this.handleClick = this.handleClick.bind(this);
  }
  setValues(key) {
    const temp = key;
    return key;
  }
  handleClick(key) {
    const { value } = this.state;
    console.log(key);
    const data = this.setValues(key);
    this.setState({ value: data });
  }
  render() {
    return (
      <div>
        <div>{this.state.value}</div>
        <InitArr myArray={this.state.myArray} handleClick={this.handleClick} />
      </div>
    );
  }
}
ReactDOM.render(<App />,document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"/>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。