当前位置: 首页 > 知识库问答 >
问题:

禁用后返回按钮不会再次启用

蔚元明
2023-03-14

这是我使用的代码。问题是,一旦后退按钮被禁用,当我单击下一个按钮时,它不会启用。有人能帮我弄清楚我做错了什么吗?

类应用程序扩展React.Component{constructor(props){super(props)this.state={data:[],start:1,disabledNext:false,disabledBack:false

    }
}
componentDidMount() {
  this.displayImages(this.state.start)

}

displayImages(a){
    axios
    .get(`https://jsonplaceholder.typicode.com/photos/?_start=${a}&_limit=5`)
    .then(res => { 
        this.setState({
            data : res.data
        });
    }) 
}

handleBack = () => {
    let prev = this.state.start - 5
    let disabledBack = false
    if (prev <= 1){
        prev = 1
        disabledBack = true
    }
    this.setState({ start: prev , disabledBack: disabledBack })
    this.displayImages(prev)

};

handleNext = () => {
      let newStart = this.state.start + 5
      this.setState({ start: newStart })
      this.displayImages(newStart)
};


render() {
    const {  data , disabledBack } = this.state
    return(
    <div>
    {
        data.map(item => {
        return(
            <img src={item.thumbnailUrl} alt="img"/>
        )
    })
    }
    
    <br></br> <br></br>
    <button type="button" onClick={this.handleBack} disabled={disabledBack}>Back</button>
    <button type="button" onClick={this.handleNext} >Next</button>
    </div>
)
}

}

共有1个答案

姬康平
2023-03-14

如果你能理解上一个和下一个btn是如何工作的,那么你可以在react中做很多事情。

代码:https://codesandbox.io/s/inventory-progress-u2v90

    const App = () => {
      const [state, setState] = useState([
        { item: "1", desc: "1", active: true },
        { item: "2", desc: "2", active: false },
        { item: "3", desc: "3", active: false }
      ]);
      const stateIndex = state.findIndex(function (item) {
        return item.active;
      });
      return (
        <div>
          {state.map((item) => {
            return (
              <p style={{ backgroundColor: item.active ? "red" : "gray" }}>
                {item.desc}
              </p>
            );
          })}
          <button
            onClick={() => {
              stateIndex > 0 &&
                setState([
                  ...state.map((item, iIndex) =>
                    iIndex === stateIndex
                      ? {
                          ...item,
                          active: false
                        }
                      : {
                          ...item,
                          active:
                            iIndex ===
                            stateIndex -
                              1
                              ? true
                              : false
                        }
                  )
                ]);
            }}
          >
            Prev
          </button>
          <button
            onClick={() => {
              stateIndex + 1 < state.length &&
                setState([
                  ...state.map((item, iIndex) =>
                    iIndex === stateIndex
                      ? {
                          ...item,
                          active: false
                        }
                      : {
                          ...item,
                          active:
                            iIndex ===
                            stateIndex  +
                              1
                              ? true
                              : false
                        }
                  )
                ]);
            }}
          >
            Next
          </button>
        </div>
      );
    }
<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>
 类似资料:
  • 问题内容: 提交表单时,我正在使用jquery $ .post。我想在单击按钮后禁用按钮约5秒钟,以避免多次提交表单。 这是我现在所做的: 我之前使用了fadeIn和fadeOut,但是当我快速测试单击按钮时仍然无法正常工作。我应该怎么做才能实现自己想实现的目标? 问题答案: 您可以这样操作: 或者您可以使用ajax收到响应后正在执行的jQuery 方法: 编辑: 这是一个 3秒钟服务器端响应延迟

  • 问题内容: 我在Django中使用python,我希望重定向用户在注销后单击“后退”按钮时重定向到登录页面。如何实现呢?在哪里写代码? 要测试django管理员是否处理此..i,请先登录django admin ..注销,然后单击“后退”按钮,然后我就可以看到上一页。为什么django管理员无法处理此问题。 这是在django admin中注销的Ccode: 问题答案: 终于找到了解决方案: 这将

  • 我有一个活动,当我的应用程序首次启动时开始(只有一次)。该活动允许用户选择主题。然后当他们按下完成键时,我完成了这项活动。这会将用户引导到主活动。但是当用户按下返回按钮时,它会返回到第一次启动的活动(我使用完成()关闭的活动)。但我想要的是,应用程序应该关闭时,用户按下返回按钮从主活动(总是)。我在两个类中都重写了onBackPress。 这两个类中的onBackPressed方法如下所示: 主活

  • 这显然是我在这里的第一篇文章...好吧,我的问题如下:@android:我有一个用户输入文本的文本编辑器,我通过getText()获取文本,一切正常,但当我按下后退按钮,再次返回到文本编辑器的相同活动并尝试再次获取文本时,它返回空字符串"",尽管文本编辑器视图中显示了不同的文本。会不会是文本编辑仍然与旧的关闭活动“相关或对应”?有什么想法吗? 然后在 AsynckTask 中,我将文本发送到发送,

  • 我正在使用Selenium和Python来自动化上传文件的过程。有一个“上载”按钮,默认情况下禁用,只有在选择要上载的文件时才可单击该按钮。 禁用的HTML按钮是- 按钮可点击后的HTML是- 我正在使用- 但它不工作。我相信这是点击禁用按钮(即使文件被选择,按钮已经变得可点击)。我也试过- 但这会给出一个超时异常。那么我应该怎么做才能在它变得可点击后点击这个按钮。我尝试过一些来自互联网的解决方案

  • 问题内容: 我有这个HTML: 我该如何做这样的事情: 当文本字段为空时,应禁用提交(disabled =“ disabled”)。 在文本字段中键入内容以删除禁用的属性时。 如果文本字段再次变为空(删除了文本),则应再次禁用提交按钮。 我尝试过这样的事情: …但这不起作用。有任何想法吗? 问题答案: 问题在于,仅当焦点从输入移开(例如,有人单击输入或将选项卡移出输入)时,更改事件才会触发。尝试改