代码之家  ›  专栏  ›  技术社区  ›  user8359832

我睡觉的时候他正在工作

  •  0
  • user8359832  · 技术社区  · 6 年前

    所以我有一个正常的工作时间 react-modal 从那以后,我一直在做的就是给应用程序添加样式。

    现在,我打开modal的按钮不起作用。

    我在两份文件中查找了问题所在。

    决策树。js:

    import React from 'react';
    import AddOption from './AddOption';
    import Header from './Header';
    import Action from './Action';
    import Options from './Options';
    import OptionModal from './OptionModal';
    
    export default class DecisionTreeApp extends React.Component {
      state = {
        options: [],
        selectedOption: undefined
      };
      handleDeleteOptions = () => {
        this.setState(() => ({
          options: []
        }));
      };
      handleDeleteOption = optionToRemove => {
        this.setState(prevState => ({
          options: prevState.options.filter(option => optionToRemove !== option)
        }));
      };
    
      handleClearSelectedOption = () => {
        this.setState(() => ({ selectedOption: undefined }));
      };
    
      handlePick = () => {
        const randomNum = Math.floor(Math.random() * this.state.options.length);
        const option = this.state.options[randomNum];
        this.setState(() => ({
          selectedOption: option
        }));
      };
    
      handleAddOption = option => {
        if (!option) {
          return 'Enter valid value to add item';
        } else if (this.state.options.indexOf(option) > -1) {
          return 'This option already exists';
        }
    
        this.setState(prevState => ({
          options: prevState.options.concat(option)
        }));
      };
    
      componentDidMount() {
        try {
          const json = localStorage.getItem('options');
          const options = JSON.parse(json);
    
          if (options) {
            this.setState(() => ({ options }));
          }
        } catch (e) {
          // Do nothing at all
        }
      }
      componentDidUpdate(prevProps, prevState) {
        if (prevState.options.length !== this.state.options.length) {
          const json = JSON.stringify(this.state.options);
          localStorage.setItem('options', json);
        }
      }
      componentWillUnmount() {
        console.log('componentWillUnmount');
      }
      render() {
        const subtitle = 'For binary life decisions, put your trust in a computer';
    
        return (
          <div>
            <Header subtitle={subtitle} />
            <div className="container">
              <Action
                hasOptions={this.state.options.length > 0}
                handlePick={this.handlePick}
              />
              <div className="widget">
                <Options
                  options={this.state.options}
                  handleDeleteOptions={this.handleDeleteOptions}
                  handleDeleteOption={this.handleDeleteOption}
                />
                <AddOption handleAddOption={this.handleAddOption} />
              </div>
            </div>
            <OptionModal
              selectedOption={this.state.selectedOption}
              handleClearSelectedOption={this.handleClearSelectedOption}
            />
          </div>
        );
      }
    }
    

    或者选择模式。js:

    import React from 'react';
    import Modal from 'react-modal';
    
    const OptionModal = (props) => (
      <Modal
        isOpen={!!props.selectedOption}
        onRequestClose={props.handleClearSelectedOption}
        contentLabel="Selected Option"
        closeTimeoutMS={200}
        className="modal"
      >
        <h3>Selected Option</h3>
        {props.selectedOption && <p>{props.selectedOption}</p>}
        <button onClick={props.handleClearSelectedOption}>Okay</button>
      </Modal>
    );
    
    export default OptionModal;
    

    我在上面的任何代码中都没有看到任何语法错误。你们有谁看到语法错误吗?

    在控制台中,我收到以下警告:

    警告:React无法识别 Click 支持DOM元素。如果有意希望它作为自定义属性出现在DOM中,请将其拼写为小写 click 相反如果意外地从父组件传递了它,请将其从DOM元素中删除。

    但我不相信我用过 点击 道具在我的代码中的任何地方。我甚至找了一个,但我没看到。

    当我使用react-dev工具和检查 状态 ,当我按下按钮时,我看不到任何变化,只是当我添加选项时:

    enter image description here

    这是我的 Action.js 文件:

    import React from 'react';
    
    const Action = (props) => (
      <div>
        <button
          className="big-button"
          onClick={props.handlePick}
          disabled={!props.hasOptions}
        >
          What should I do?
        </button>
      </div>
    );
    
    export default Action;
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Daniel    6 年前

    我建议你回顾一下 Action.js 作品从你分享的, 行动js 把你的 big-button .它需要两个道具才能工作。它需要 handlePick hasOptions . 有选择权 似乎是一个布尔值,让按钮知道它是已启用还是在您的情况下 disabled .

    手杖 功能是什么

    handlePick = () => {
        const randomNum = Math.floor(Math.random() * this.state.options.length);
        const option = this.state.options[randomNum];
        this.setState(() => ({
          selectedOption: option
        }));
      };
    

    他的工作是随机挑选一件物品并展示给模特。

    我会把重点放在这些方面,假设你很清楚他们做了什么。在你的情况下,一旦你看了 Actions.js 文件中,您注意到 手杖 有个打字错误。

    同样,了解每个组件的工作方式对于有效的故障排除至关重要。