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

使用条件导致 React 渲染限制错误

如何解决使用条件导致 React 渲染限制错误

我做了一个暗模式功能。有使用复选框并获取当前小时来更改此模式。 当我编写传统的 If 语句时,它会导致渲染限制错误(如堆栈溢出)。

这是我的代码

public class Anniversary extends AppCompatActivity {

private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter adapter;
TextView Nametxt;
TextView Datetxt;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_anniversary);
    Nametxt = findViewById(R.id.annviersaryNametxt);
    Datetxt = findViewById(R.id.annviersaryDatetxt);


    recyclerView = findViewById(R.id.anniversaryRecylerView);
    layoutManager = new linearlayoutmanager(this);
    recyclerView.setLayoutManager(layoutManager);

    adapter = new AnniversaryAdapter();
    recyclerView.setAdapter(adapter);


    Toolbar toolbar = findViewById(R.id.toolbar);
    toolbar.setTitle(getResources().getString(R.string.app_name));

    //define the recyclerview
    RecyclerView recyclerView = findViewById(R.id.anniversaryRecylerView);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            StartNewActivity();
        }
    });
    add();

}



// start new activity method
public void StartNewActivity(){
    Intent intent = new Intent(this,Add.class);
    startActivity(intent);
}
private void add() {
    Intent intent = getIntent();
    String name = intent.getStringExtra(Add.NAME);
    String date = intent.getStringExtra(Add.DATE);

    Datetxt.setText(date);
    Nametxt.setText(name);
}

我无法从 Internet 上找到解决方案。

我认为答案是使用 UseEffect 方法,但我真的不知道如何在我的情况下使用它。或者这个复选框会导致这个无限变化的值?

你能帮我解决这个问题吗?

解决方法

在 React 风格中,我会这样做:

 import React,{ useState,useEffect } from "react";

const App = () => {
  const [isNight,setDarkMode] = useState(false);

  useEffect(() => {
    let t = new Date().getHours().valueOf();
    setDarkMode(t < 6 || t > 19);
  },[]);

  return (
    <div className={isNight ? "dark-mode" : "light-mode"}>
      <div>{isNight ? "dark-mode" : "light-mode"}</div>
      <input
        type="checkbox"
        onChange={(e) => setDarkMode(e.target.checked)}
        checked={isNight}
        name="darkModeInput"
      />
      <label htmlFor="darkModeInput">Switch dark mode</label>
    </div>
  );
};

export default App;

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