---
id: near
title: Interacting with Near
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import {WidgetEditor} from "@site/src/components/widget-editor"
The components can use the `Near` object to interact with smart contracts in the NEAR blockchain. There are three methods:
- [`Near.view`](#nearview)
- [`Near.block`](#nearblock)
- [`Near.call`](#nearcall)
---
## Near.view
Queries a read-only method from a NEAR smart contract, returning:
- **`null`**: If the query is still being processed
- **`undefined`**: If the query is complete and no value was returned by the contract
- A **value**: If the query is complete and a value was returned by the contract
```js
const greeting = Near.view("hello.near-examples.testnet", "get_greeting", {});
if (greeting === null) return "Loading...";
return `The contract says: ${greeting}`;
```
Parameters
| param | required | type | description |
|--------------------|--------------|-----------------|--------------------------------------------------------------------------------------------------------------------------------|
| `contractName` | **required** | string | Name of the smart contract |
| `methodName` | **required** | string | Name of the method to call |
| `args` | _optional_ | object instance | Arguments to pass to the method |
| `blockId/finality` | _optional_ | string | Block ID or finality of the transaction |
| `subscribe` | _optional_ | boolean | This feature allows users to subscribe to a query, which automatically refreshes the data for all subscribers every 5 seconds. |
:::tip
Notice that the optional parameter `subscribe` allows users to subscribe to a query, which automatically refreshes the data every 5 seconds.
:::
#### Avoiding a Common Pitfall
If you want to initialize the state with the result of a `Near.view` call, be sure to check first that the value was obtained, to avoid initializing the state with `null`.
```js
const contractGreet = Near.view("hello.near-examples.testnet", "get_greeting", {});
// you need to first check that the value was obtained
if (contractGreet === null) return "Loading...";
const [greeting, setGreeting] = useState(contractGreet);
return `The contract says: ${greeting}`;
```
If you don't want to delay the render of your component, you can also use the `useEffect` hook to control the value returned by `Near.view`
```js
const contractGreet = Near.view('hello.near-examples.testnet', 'get_greeting');
const [greeting, setGreeting] = useState('Loading ...');
useEffect(() => {
if (contractGreet !== null) setGreeting(contractGreet);
}, [contractGreet]);
return `The contract says: ${greeting}`;
```
---
## Near.call
Calls a smart contract method from the blockchain. Since a transaction needs to be signed, the user must be logged in in order to make the call.
```js
if (!context.accountId) return "Please login...";
const onClick = () => {
Near.call(
"hello.near-examples.testnet",
"set_greeting",
{ greeting: "Hello!" }
);
};
return <>
Hello {context.accountId}
>;
```
Parameters
| param | required | type | description |
|----------------|--------------|-----------------|-----------------------------------------------------------------------------|
| `contractName` | **required** | string | Name of the smart contract to call |
| `methodName` | **required** | string | Name of the method to call on the smart contract |
| `args` | _optional_ | object instance | Arguments to pass to the smart contract method as an object instance |
| `gas` | _optional_ | string / number | Maximum amount of gas to be used for the transaction (default 300Tg) |
| `deposit` | _optional_ | string / number | Amount of NEAR tokens to attach to the call as deposit (in yoctoNEAR units) |
:::tip
Remember that you can login using the `Login` button at the navigation bar.
:::
---
## Near.block
Queries a block from the blockchain.
```js
return Near.block("optimistic");
```
Parameters
| param | required | type | description |
|-------------------------|------------|------|---------------------------------------------------------------------------------------------------------------------------------------------------|
| `blockHeightOrFinality` | _optional_ | any | The block height or finality level to use for the blockchain query (desired block height, or one of the following strings: `optimistic`, `final`) |
- desired block height: The height of the specific block to query, expressed as a positive integer
- `optimistic`: Uses the latest block recorded on the node that responded to your query (< 1 second delay)
- `final`: a block that has been validated on at least 66% of the nodes in the network (approx. 2s)