ReactJS - findAllInRenderedTree()



将我们的 React 应用程序视为一棵大树,每个组件都充当一个分支。findAllInRenderedTree 方法充当友好的资源管理器,遍历每个分支并确定它是否与测试匹配。

这是它的工作原理

输入 - 资源管理器收到两个项目:tree(我们的 React 应用程序)和一个 test(一个可以帮助我们找到我们正在寻找的内容的规则)。

遍历 - 资源管理器逐个遍历树的每个组件。

测试 − 资源管理器对每个组件使用测试。如果组件通过了测试(测试返回 true),则资源管理器会将其添加到列表中。

结果 - 最后,我们将获得通过测试的所有组件的列表。

语法


findAllInRenderedTree(
	 	tree,
	 	test
)

参数

  • tree (React.Component) - 要遍历的根组件的树。
  • test(function) - 接受输入并返回布尔值的测试函数。此函数确定结果中是否应包含组件。

返回值

此函数返回通过测试的组件数组。

例子

示例 1

若要在待办事项列表中查找所有已完成的项,请使用 findAllInRenderedTree。

创建一个包含待办事项列表的 React 应用。要将任务标记为已完成,请在任务旁边添加一个复选框。我们将使用 findAllInRenderedTree 来单独识别和显示所有已完成的作业。


import React, { useState } from 'react';
import './App.css';

const TodoApp = () => {
	 	const [tasks, setTasks] = useState([
	 	 	 { id: 1, text: 'Complete task 1', completed: false },
	 	 	 { id: 2, text: 'Finish task 2', completed: true },
	 	 	 // Add more tasks if needed
	 	]); 		
	 	const findCompletedTasks = () => {
	 	 	 // Using findAllInRenderedTree to find completed tasks
	 	 	 const completedTasks = findAllInRenderedTree(tasks, (task) => task.completed);
	 	 	 console.log('Completed Tasks:', completedTasks);
	 	}; 		
	 	return (
	 	 	 <div className='App'>
	 	 	 	 	<h2>Todo List</h2>
	 	 	 	 	{tasks.map((task) => (
	 	 	 	 	 	 <div key={task.id}>
	 	 	 	 	 	 	 	<input type="checkbox" checked={task.completed} readOnly />
	 	 	 	 	 	 	 	<span>{task.text}</span>
	 	 	 	 	 	 </div>
	 	 	 	 	))}
	 	 	 	 	<button onClick={findCompletedTasks}>Find Completed Tasks</button>
	 	 	 </div>
	 	);
};

export default TodoApp;

输出

ToDoList 完成任务

示例 2

在此应用程序中,我们必须识别并显示调色板中与颜色相关的所有组件,因此我们将使用 findAllInRenderedTree。

使用调色板创建一个 React 应用,每种颜色都充当一个组件。若要发现和显示所有颜色组件,请使用 findAllInRenderedTree。


import React from 'react';
import './App.css';

const ColorPaletteApp = () => {
const colors = ['red', 'blue', 'green', 'yellow', 'purple'];
const findColorComponents = () => {
	 	
	 	// Using findAllInRenderedTree to find color components
	 	const colorComponents = findAllInRenderedTree(colors, (color) => color);
	 	console.log('Color Components:', colorComponents);
};

return (
	 	<div className='App'>
	 	 	 <h2>Color Palette</h2>
	 	 	 {colors.map((color) => (
	 	 	 	 	<div key={color} style={{ backgroundColor: color, height: '50px', width: '50px' }}></div>
	 	 	 ))}
	 	 	 <button onClick={findColorComponents}>Find Color Components</button>
	 	</div>
	 	);
};

export default ColorPaletteApp;

输出

调色板

示例 3

在这个应用程序中,我们将在交互式测验中找到并评估所有响应组件。因此,创建一个 React 应用程序,其中包含一个带有问题和多项选择答案的交互式测验。使用 findAllInRenderedTree 查找和评估所选答案,并根据正确性提供反馈。


import React, { useState } from 'react';
import './App.css';

const QuizApp = () => {
	 	const [questions, setQuestions] = useState([
	 	 	 { id: 1, text: 'What is the capital of France?', options: ['Berlin', 'London', 'Paris'], correctAnswer: 'Paris' },
	 	 	 { id: 2, text: 'Which planet is known as the Red Planet?', options: ['Earth', 'Mars', 'Venus'], correctAnswer: 'Mars' },
	 	]); 		
	 	const checkAnswers = () => {
	 	 	 // Using findAllInRenderedTree to find selected answers
	 	 	 const selectedAnswers = findAllInRenderedTree(questions, (question) => question.selectedAnswer);
	 	 	 console.log('Selected Answers:', selectedAnswers);
	 	}; 		
	 	const handleOptionClick = (questionId, selectedOption) => {
	 	 	 setQuestions((prevQuestions) =>
	 	 	 	 	prevQuestions.map((question) =>
	 	 	 	 	 	 question.id === questionId
	 	 	 	 	 	 ? { ...question, selectedAnswer: selectedOption }
	 	 	 	 	 	 : question
	 	 	 	 	)
	 	 	 );
	 	};
	 	
	 	return (
	 	 	 <div className='App'>
	 	 	 	 	<h2>Interactive Quiz</h2>
	 	 	 	 	{questions.map((question) => (
	 	 	 	 	 	 <div key={question.id}>
	 	 	 	 	 	 	 	<p>{question.text}</p>
	 	 	 	 	 	 	 	{question.options.map((option) => (
	 	 	 	 	 	 	 	 	 <label key={option}>
	 	 	 	 	 	 	 	 	 <input
	 	 	 	 	 	 	 	 	 type="radio"
	 	 	 	 	 	 	 	 	 name={`question-${question.id}`}
	 	 	 	 	 	 	 	 	 value={option}
	 	 	 	 	 	 	 	 	 onChange={() => handleOptionClick(question.id, option)}
	 	 	 	 	 	 	 	 	 />
	 	 	 	 	 	 	 	 	 {option}
	 	 	 	 	 	 	 	 	 </label>
	 	 	 	 	 	 	 	))}
	 	 	 	 	 	 </div>
	 	 	 	 	))}
	 	 	 	 	<button onClick={checkAnswers}>Check Answers</button>
	 	 	 </div>
	 	);
};

export default QuizApp;

输出

互动测验

总结

这些示例演示如何在各种情况下使用 findAllInRenderedTree 方法,从任务管理到浏览调色板和生成交互式测验。每个应用程序都使用该方法来定位 React 树中的某些组件并与之交互。