withState

با استفاده از هوک withState می توانید کامپوننت خود را به استیت سراسری متصل کنید. این هوک دو پارامتر دریافت می کند:

  • اولین پارامتر همان کامپوننت ری اکت شما میباشد.
  • پارامتر دوم اختیاری است و زمانی استفاده می شود که می خواهید کامپوننت خود را به یک observer سفارشی متصل کنید.

در اینجا مثالی از نحوه استفاده از هوک withState آورده شده است:

import { withState } from 'rosma'; function CountNumbers({ number = 0, setNumber }) { return <button onClick={() => setNumber(number + 1)}>{number}</button>; } export default withState(CountNumbers);
import { withState, WithSetters } from 'rosma'; type State = { number: number; }; function CountNumbers({ number = 0, setNumber }: WithSetters<State>) { return <button onClick={() => setNumber(number + 1)}>{number}</button>; } export default withState(CountNumbers);

در این مثال، کامپوننت CountNumbers با هوک withState به استیت سراسری متصل شده است. پراپ های number و setNumber به طور خودکار توسط این هوک در اختیار کامپوننت قرار می گیرند.

اگر نیاز دارید پارامترهای دیگری غیر از مقادیر موجود در استیت را به کامپوننت خود منتقل کنید، می توانید خروجی withState را در یک متغیر ذخیره کرده و از آن به عنوان کامپوننت React استفاده کنید و مقادیر دلخواه مورد نیاز خود را به عنوان پراپ به آن کامپوننت ارسال کنید.

import { useState } from 'react'; import { withState } from 'rosma'; const ComponentA = withState(({ number = 0, setNumber, strTime }) => ( <div style={{ backgroundColor: '#efefef', padding: '5px' }}> <p style={{ fontWeight: 'bold' }}>Component A</p> <button onClick={() => setNumber(number + 1)}>Count is: {number}</button> <p>Time is: {strTime}</p> </div> )); export function ComponentB() { const [strTime, setStrTime] = useState(''); return ( <> <ComponentA strTime={strTime} /> <div style={{ backgroundColor: '#e2e2e2', padding: '5px' }}> <p style={{ fontWeight: 'bold' }}>Component B</p> <button onClick={() => setStrTime(new Date().toLocaleTimeString())}> click to update time </button> </div> </> ); }
import { useState } from 'react'; import { withState } from 'rosma'; type State = { number: number; }; const ComponentA = withState<State, { strTime: string }>( ({ number = 0, setNumber, strTime }) => ( <div style={{ backgroundColor: '#efefef', padding: '5px' }}> <p style={{ fontWeight: 'bold' }}>Component A</p> <button onClick={() => setNumber(number + 1)}>Count is: {number}</button> <p>Time is: {strTime}</p> </div> ) ); export function ComponentB() { const [strTime, setStrTime] = useState<string>(''); return ( <> <ComponentA strTime={strTime} /> <div style={{ backgroundColor: '#e2e2e2', padding: '5px' }}> <p style={{ fontWeight: 'bold' }}>Component B</p> <button onClick={() => setStrTime(new Date().toLocaleTimeString())}> click to update time </button> </div> </> ); }

Component A

Time is:

Component B

در این مثال، مقدار ComponentA از خروجی هوک withState گرفته شده، همانطور که مشاهده میشود این کامپوننت پراپ اضافی strTime را می پذیرد. همچنین ComponentB در داخل خود ComponentA را رندر کرده و پراپ strTime را به آن ارسال می کند.

observer سفارشی همراه با withState

در این مثال یک observer سفارشی به عنوان پارامتر دوم به هوک withState ارسال شده است :

import { withState, Observer } from 'rosma'; const observer = new Observer({ number: 10 }); export const CountNumber = withState( ({ number, setNumber }) => ( <button onClick={() => setNumber(number + 1)}>Number is :{number}</button> ), observer );
import { withState, Observer } from 'rosma'; type State = { number: number; }; const observer = new Observer<State>({ number: 10 }); export const CountNumber = withState<State>( ({ number, setNumber }) => ( <button onClick={() => setNumber(number + 1)}>Number is :{number}</button> ), observer );

در این مثال یک کامپوننت ری اکت با استفاده از هوک withState به یک observer سفارشی که در پارامتر دوم به هوک withState پاس داده شده متصل شده است و خروجی آن در متغیری به نام CountNumber ذخیره و export شده است.

کلید واژه ها: withState, استیت سراسری, هوک, useState, React, مشاهده‌گر سفارشی, کامپوننت, پارامتر, پراپ, مقادیر, Observer, CountNumber, setNumber